• 締切済み

windowオブジェクトを引数で送りたい

連続ですみません、表題の件についてご教授をお願いします。 window.openで別ウィンドゥを開いていますが、 この時返ってくるwindowオブジェクトを 別の関数で使用したいのですが引き渡しができません。 やりたい事は下記のようなイメージですが、オブジェクトエラーが発生します。 winname = window.open("test.html", "win"); functest(winname); function functest(winnameF){ alert(winnameF.name); } 引渡しの方法がありましたらご指導いただけませんでしょうか。 よろしくお願いいたします。

  • g_RIN
  • お礼率66% (16/24)

みんなの回答

  • ittochan
  • ベストアンサー率64% (2667/4137)
回答No.5

ローカル変数ってのは functionから抜けた時点で無くなる運命ですから、 引き渡そうにもできないでしょう。 >setTimeout("functest(" + winname + ")",1000); で、これは変数を定数にしてるから実現できちゃうんです。 >winnameをグローバル変数にする事は残念ながらできません。 ヽ(+▽+)ノ 別の方法を考えたほうがいいと思いますよ。

g_RIN
質問者

お礼

ご指示ありがとうございます。その後悪戦苦闘した結果、 考え方を変更して、グローバルな連想配列で対応する事にしました。 ローカル変数をキーとする形で、なんとか目的の機能は果たせたと思います。 細やかなご指導ありがとうございました。 #でも、文字列も数値も引き渡せるのに、OBJECTだけは変数ごとじゃないと引き渡せないって (プログラムとしては)当たり前なのでしょうが、心境として納得がいかない~(苦笑)

  • ittochan
  • ベストアンサー率64% (2667/4137)
回答No.4

var winname; function ittochan(){ winname = window.open("test.html", "win"); setTimeout("functest(winname)",1000); }   function functest(winnameF){ alert(winnameF.name); } こういうふうに winnameをグローパルにしちゃ駄目なの?

g_RIN
質問者

補足

再々のアドバイスありがとうございます。 ご指摘の通り、winnameがローカル変数でさらに下記のように winnameの名前自体を修正(?)しているので、連携がうまくいっていないようです。 function getlist(namae,url){ winname = namae; winname = window.open(url, "win"); setTimeout("functest(winname)",1000); } 擬似マルチスレッドにしたいので、winnameをグローバル変数にする事は残念ながらできません。 実現方法に行き詰まって途方に暮れています(;_;)

  • ittochan
  • ベストアンサー率64% (2667/4137)
回答No.3

あっ、もしかして winname て ローカル変数なの? ちなみに >setTimeout("functest(" + winname + ")",1000); この場合、 winname のタイプは、 文字列とか数値じゃなきゃうまくいかないとおもいますよ。

  • ittochan
  • ベストアンサー率64% (2667/4137)
回答No.2

それでもうまく動きましたよ win って出ました。 InternetExplorerのバージョンによるのかなぁ (・ε・?

  • ittochan
  • ベストアンサー率64% (2667/4137)
回答No.1

そのスクリプト InternetExplorer6では うまく動きましたよ。

g_RIN
質問者

補足

アドバイスありがとうございます。当方の勘違いでした。 setTimeoutと組み合わせた時のみのエラーでした。 winname = window.open("test.html", "win"); setTimeout("functest(winname)",1000);    ←ここ   function functest(winnameF){ alert(winnameF.name); } とした時にwinnameの「宣言されていない」エラーが出ます。そのため setTimeout("functest(" + winname + ")",1000); とするとfunctest()で「'object'は宣言されていません」のエラーになってしまいます。 素直にオブジェクトの形のまま、functestに引渡したいのです。 引き続きご指導をお願いします。

関連するQ&A

  • window.openについて。

    初歩的な質問で申し訳ありません。 ★<script> function openWin(filename){ newWin = window.open(winname + ".html", "", "width=300, height=200, location=no, menubar=no, toolbar=no,resizable=yes"); } </script> ★<a href="JavaScript:openWin('pr00001')">PR00001</a> ・・・という二つのパーツ(★)があるのですが ここで分からないことがあります。 『function openWin(filename)』の『filename』にpr00001というhtmlファイルを埋め込む・・というのは理解できるのですが最初のパーツにある『newWin = window.open(winname + ".html"・・・』の中の『winname + ".html"』とは何を指しているのでしょうか・・・・。 大変申し訳ありませんがご指導お願いいたします。

  • 生成する際、オブジェクトリテラルに引数を渡すには?

    ■前提 function Man(name) {  this.aisatu = function() {   alert('こんにちは' + name);  } } var man = new Man('伊藤'); man.aisatu(); ・上記をオブジェクト・リテラルに書き直してみたいのですが、どう書けば良いのでしょうか? ・とりあえず下記のようにしてみたのですが、これだと引数として'伊藤'が渡されていないので、なるべく上と同じ内容で、オブジェクト・リテラルに書き直したいです var man = {  name : "伊藤",  aisatu : function () { alert('こんにちは' + this.name) } }; man.aisatu();

  • windowオブジェクトの操作

    登録フォームを作成しています。 登録内容に誤りがなければ次のページへ飛び、登録内容に誤りがある場合は再度同じページで登録させる(次のページにはいかないようにさせたい。)というふうにしたいのですがどうすればよいでしょうか? function mailcheck(){ var tmail = document.form.temail.value; var mail = document.form.email.value; if(tmail != mail){ window.alert("E-Mailが一致しません!"); ★ } else if((tmail == "") | (mail == "")){ window.alert("E-Mail記入されていません! "); ★ } } <input type="submit" value="確認" name="submit" onclick="mailcheck()"> この場合は★マークの所でwindowオブジェクトだけで操作できるのでしょうか?

  • オブジェクト指向で書いた時のフォーム値受取り

    オブジェクト指向で記述したときの、フォームの値の受取の記述方法 がわかりません。 例えば下記のようなフォームがあったとすると ---------------------- <form name="test"> <input type="text" name="name"> <input type="button" value="送信" onClick="testAlert()"> </form> ---------------------- 手続き型では ============================= function testAlert(){  var name = document.test.name.value;  alert(name); } ============================= こんな感じで値を受取りアラート出力できますが、 オブジェクト指向で記述した場合はどうなりますか? ============================= var aaa = function(name){  this.name = name; }; aaa.prototype.test = function(){  return alert(name); }; ============================= こういうような感じだとは思うのですが、ここから先が分かりません。 よろしくお願いします。

  • IE7でのwindow.close後のwindow.openについて

    javascriptで、ボタンクリックでウィンドウを開くときに、同じ名前のウィンドウが既に開いていたら一回閉じで、開き直すというロジックを書いてます。 これはIE6では正常に動いているのですが、IE7になると、ウィンドウが閉じたまま、開き直さないで何も表示されなくなってしまいます。たまに開くときもあるのですが。 ボタンクリック後のコードを載せます。 ちゃんと開く方法はないでしょうか? function openwindow(){ var newWindow = window.open("test.html", "test"); if(newWindow.name == "test") { newWindow.close(); } oneScdWindow=window.open("test.html", "test"); }

  • window openについて

    こんにちは、例えば以下のようなスクリプトがあったとします。 <html> <form name = serchform> <input type=text name=id><br> <input type=submit value=ID検索 onclick="openwin()"> <a href="javascript:open(1);"><Img Src="1.bmp"></a><br> <a href="javascript:open(2);"><Img Src="2.bmp"></a><br> <script type="text/javascript"><!-- function openwin() { a = document.serchform.id.value; url = "http://10.8.2.166/test/syuhou_kensaku.php?id="+a; mywin = window.open(url,"","width=1120,height=500"); } function open(select) { if(aa == 1){ alert("Test") url2="http://10.8.2.166/test/kensaku.php?msg="+Testです; mywin2 = window.open(url2,"",""); } } //--></script> このソースを実行すると、ID検索ボタンをクリックしても何も反応せず 1.bmpをクリックすると、Testとメッセージが表示され、画面左下に 警告マークが表示され、何も反応しません。 しかし、function open(select)を削除し、ID検索ボタンをクリック すると命令した処理を実行してくれます。 function openwin()を削除したらその逆も起きるのかと考えやって みたのですが、これについては上記と同じエラーでした。 なぜこのようになるのか原因が分かりません。 どなたかご存知の方がいらっしゃいましたら、アドバイスよろしく お願い致します。

  • window.onload = alertでエラー

    window.onload = alert('テスト');とやると、 テストと表示された後、 「実装されていません」というエラーになります。 window.onload = function(){  alert('テスト'); } とやればうまくいくのですが、 window.onload = alert('テスト');では、なぜダメなのでしょうか? また、表示された後、「実装されていません」というエラーが出ることについて、 中でどういう処理が走って、こういう結果になるのでしょうか?

  • window.onloadに関数を指定したいです。

    window.onloadに関数を指定したいです。 以下のfoge関数をwindow.onloadに入れる場合は、どうすればいいのでしょうか? function test(){ this.foge = function(){ } } 以下のような感じで、fogeを指定したいのですが。 window.onload=function(){test()} function test(){ } どうすればいいのでしょうか? よろしくお願いします。

  • 関数名について

    function MM_openBrWindow(theURL,winName,features) { //v2.0 window.open(theURL,winName,features); } 上記のように「MM_*****」のような関数名のスクリプトをたまに見かけますが、 これはどこかで公開されているものなのですか? 公開されているのならURLを教えてください。

  • OpenOffice Basicで引数を2つ利用する関数が作れません

    OpenOffice Basicで引数を2つ利用する関数が作れません Open Office Calc 3.1.1を使っています。 できれば複数(3つ以上)引数を取る関数を作りたいのですが、 2つ引数を取ろうとすると演算結果が#NAME?になってしまいます。 切り分けにシンプルな関数を作ってみました。 以下で=test2(3,5)とすると結果が#NAME?になります。 Function test2(arg1 As Integer, arg2 As Integer) as Integer test2 = 3 + arg2 End Function #なお、関数内の演算内容はtest2 = arg1 + arg2でも変わらず#NAME?です 切り分けで以下を作ると=test3(3)で6が返されます Function test3(arg1 As Integer) as Integer test3 = 3 + arg1 End Function 関数名のタイプミスの可能性を排除するために、 test2関数を名前を換えずに引数の数を1つに変更してみると 計算できるのでタイプミスではないと思います。 やはり引数を複数とる取り方に問題があるように見えます。 お手数ですが何かアドバイスいただけないでしょうか?