setTimeoutでelementを渡す方法

このQ&Aのポイント
  • setTimeoutの引数にdocument.getElementByIdの情報を格納して他の関数に渡すことはできないのでしょうか?
  • setTimeoutでは渡された要素に対してタグ名などのプロパティを使うことができません。
  • 普通に渡す場合はちゃんと使えるのに、setTimeoutではなぜプロパティが表示されないのか疑問です。
回答を見る
  • ベストアンサー

setTimeoutでelementを渡す方法

setTimeoutの引数にdocument.getElementByIdの情報を格納して 他の関数に渡すことはできないのでしょうか? 下記は自分で調べた内容ですが、aaa()で変数mにdocument.getElementByIdを格納して setTimeoutの引数にその変数を指定してbbb()に渡しましたが使うことができませんでした。 [object HTMLDivElement]は渡っているようですが、tagNameでDIVが表示されません。 ccc()のように普通に渡した場合はちゃんと使えました。 データはちゃんと送られているのに、setTimeoutではなぜtagNameなどで表示されないのでしょうか。 <html lang="ja"> <head> <title>サンプル</title> <script> function aaa() { var m = document.getElementById("xxx"); alert(m); //[object HTMLDivElement] alert(m.tagName); //DIV var p = 777; setTimeout("bbb('"+m+"',"+p+")",1000); ccc(m,p); } function bbb(m,p){ alert(m); //[object HTMLDivElement] alert(m.tagName); //undefined alert(p); //777 } function ccc(m,p){ alert(m); //[object HTMLDivElement] alert(m.tagName); //DIV alert(p); //777 } </script> </head> <body onload="aaa()"> <div id="xxx">サンプル</div> </body> </html>

質問者が選んだベストアンサー

  • ベストアンサー
  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

コードが間違っているからよ setTimeout("bbb('"+m+"',"+p+")",1000); だと function bbb(m,p)のmには 文字列 [object] が入ってしまうわよ setTimeoutで呼び出す関数に引数を渡したい場合は 次のように書くといいわ setTimeout(function(){bbb(m,p);},1000);

kiseki777
質問者

お礼

解決しました。ありがとうございました。

その他の回答 (1)

  • Chaire
  • ベストアンサー率60% (79/130)
回答No.2

bbb() 内で表示された "[object HTMLDivElement]" とは文字列です。ノードではありません。 次の書式を覚えて下さい。 setTimeout(bbb, 1000, m, p); これは JavaScript 1.2 からあり、Firefox、Opera、Safari はサポート済みです(HTML(5) に収録されました)。IE だけ対応していません(というより別仕様です)が、でっち上げることは可能です。 setTimeout(function (x) {  if ('undefined' === typeof x) {   window._setTimeout = window.setTimeout;   window.setTimeout = function setTimeout (handler, timeout) {    var args = Array.prototype.slice.call(arguments, 2);    return window._setTimeout(function () {     handler.apply(window, args);     handler = timeout = args = null;    }, timeout);   };  } }, 1, 'JavaScript'); "window." を付けないと上書きした方を呼べませんので念のため。

kiseki777
質問者

お礼

参考にさせていただきます。ありがとうございました。

関連するQ&A

  • 表示/非表示の切り替え

    AAA、BBB、CCCの3つが縦に並んでいるとします。 ここで、あるボタンをクリックすると、BBBが消えるようにしたいです。 JavaScriptを使用して、以下のようなものを作ってみましたが、これだと、BBBが消えたスペースが空白として残ってしまいます。 スペースを残さずに、AAAとCCCを詰めて表示させたいのですが、何か方法はありますでしょうか? ====================================================================== <html> <body> <SCRIPT LANGUAGE='JavaScript'> <!-- function showLAYER(idName){ document.getElementById(idName).style.visibility = 'visible' } function hiddenLAYER(idName){ document.getElementById(idName).style.visibility = 'hidden' } //--> </SCRIPT> <A HREF="javascript:showLAYER('layer1')">[表示]</A> <A HREF="javascript:hiddenLAYER('layer1')">[非表示]</A> <br><br> AAA<br> <DIV ID = "layer1" > BBB </DIV> CCC<br> </body> </html> ======================================================================

  • 画像メニューの開閉

    JavaScriptで画像メニューの開閉を行いたいのですが、 うまく動きません。 「aaa」が閉じていた場合には「aaa」を開くまではできたのですが、 「bbb」を閉じるという1行を追加したら動かなくなりました。 どなたかご教授願います。 【JavaScript】 function showSubmenu01() { if(document.getElementById("aaaSub").innerHTML == '') document.getElementById("aaaSub").innerHTML = '<img src="aaa.gif">'; document.getElementById("bbbSub").innerHTML = ''; else document.getElementById("aaaSub").innerHTML = ''; } 【HTMLソース】 <ul> <li><a href="#" onClick="showSubmenu01()"><img src="img/menu_aaa.gif" /></a></li> <li><div id="aaaSub"></div></li> <li><div id="bbbSub"><img src="bbb.gif" /></div></li> </ul>

  • setTimeoutメソッドでローカル変数を渡したい

    setTimeoutメソッドでローカル変数を渡したい 表題の件につきましてご教授をお願いします。 やりたい事は 【1秒ごとにある関数(引数が必要)を走らせて一定回数後に停止する】 なのですが、setTimeoutで引数が渡せずに困っています。 (引数は固定ではないのでローカルの変数を使用したです。) あるWEBページで下記の方法で引数が渡るとありましたが、当方の環境ではエラーが発生します。 function test1(){ var the_string = "hello"; the_timeout = setTimeout("alert(" + the_string + ");",1000); } イメージとしては下記のようにIDとcntを渡し、受け取った関数で引数を処理、 その後再帰的に同一関数に引数を送る、です。 function timeA(timeIDA,cntA){ timeID = timeIDA; cnt = cntA; alert(cnt); cnt++; clearTimeout(timeID); timeID = setTimeout("timeA(timeID,cnt)",1000); } 動作環境はWIN IE5.0以上、NC4.75以上を考えています。 何か良い解決方法がありましたら、教えてください。 よろしくお願いします。 #もっと露骨にwaitに相当するメソッドがあると嬉しいのですがr(^^;

  • Apend前のElementの中のElement

    var div = document.createElement('div'); div.innerHTML="hogehoge<div id='hoge'>aaa</div>"; とし、 このdivの中のelementをID指定で取得したいです。 document.body.appendChild(div); とした後なら、 document.getElementById('hoge') で取得できるのですが、 appendChildしたくないです。 ご名案ありましたら、ご教授ください。宜しくお願いいたします。

  • ラジオボタンではなくセレクトボックスで表の表示切換

    セレクトボックスで表の表示非表示を選択できるようにしたいです。最初は非表示で。jsで。 以下はその分です。 どこを変えたらいいですか。 <script type="text/javascript"> function Click_idbbb() {   if (document.all.idbbb.checked==true) {     document.all.bbb.style.display = "block"   } else {     document.all.bbb.style.display = "none"   } } function Click_idccc() {   if (document.all.idccc.checked==true) {     document.all.ccc.style.display = "block"   } else {     document.all.ccc.style.display = "none" document.getElementById('lng').innerHTML=tmp2; document.getElementById('table').innerHTML=tmp3; } </script> <div> <p> <input id ="idbbb" type="checkbox" name="kakikukeko"onclick="Click_idbbb()">かきくけこ <input id ="idccc" type="checkbox" name="sashisuseso"onclick="Click_idccc()">さしすせそ </p> <div id="bbb" style="display:none;">  <table border="1" cellspacing="2" cellpadding="0">   <tr><td>テーブル2<p></p></td></tr>  </table> </div> <div id="ccc" style="display:none;">  <table border="1" cellspacing="2" cellpadding="0">   <tr><td>テーブル3<p></p></td></tr>  </table> </div>

  • スマートフォンで自作javascriを動作させたい

    最近発売されたAQUOS PHONE(スマートフォン)を使っています。 質問したいことは、 そのスマートフォンでhtmlファイルをローカルで開き、 Javascriptを正しく動作させるにはどうしたらいいのでしょうか? PC上で作ったhtmlファイルをスマートフォンの 「ローカルファイル>Documents>SampleFiles」 の中に保存して開きました。 下記コードでhtmlの部分はちゃんと表示させられたのですが、 javascriptは動作しませんでした。 文字コードはShift_JISです。 <head> <script type="text/javascript"> function bbb(){ a1 = "ボタンをクリックするとhtmlに表示させる文字列、その1"; document.getElementById("ccc").innerHTML = a1; } function ddd(){ a2 = "ボタンをクリックするとhtmlに表示させる文字列、その2"; document.getElementById("eee").innerHTML = a2; } </script> </head> <form name="aaa"> <div> <p>ああああああああああああああああ</p> <input type="button" value="ボタン" onclick="bbb()"> <p id="ccc"></p> </div> <div> <p>いいいいいいいいいいいい</p> <input type="button" value="ボタン" onclick="ddd()"> <p id="eee"></p> </div> </form>

  • <input> のbuttonで関数を実行したい

    <input> 要素のbuttonを押すと※の処理が実行されるようにするには、どの部分を直すべきかご指摘いただけませんか。 よろしくお願いします。 -aaa.html <html> <!DOCTYPE> <body> <input id="ccc" type="button" value="スタート"> <script src="bbb.js"></script> </body> </html> -bbb.js document.getElementById("ccc").onclick = function buttonClick(){※}

  • VBAからjavascriptに値を渡す

    VBAでIEを操作しております。 一部javascriptを使って以下のようなコードで、リンクをクリックしています。 ie.document.Script.setTimeout "javascript:document.getElementById(""ID"").click()}", 10 getElementById(""ID"")のID部分を変数にしたいのですが、 Dim ID as String ID=○○ ie.document.Script.setTimeout "javascript:document.getElementById(○○).click()}", 10 としてもうまく動きません。 javascriptの中身をfunctionにして、引数に○○を持っていっても動きませんでした。 どうすれば引数を渡すことができますか。 jscriptを使えばできそうな気がしたのですが、 js.CodeObject.関数名(引数)で渡せる引数が1つだけ?のようで こちらも頓挫しております。どうかご教示お願いします。

  • setTimeoutで、止まらない

    setTimeoutで、止まらない現象が起きています。 アップロードしたcsvファイルを、ローダーでデータベースに流し込みたいのですが、このまま実行すると、アップロードが終わらないうちに、ローダーが走ってしまいます。 アップロードの「testUpload.cgi」にsleepを入れてみたのですが、ダメでした。 sleep自体は「testUpload.cgi」のみ(setTimeout(fncLoader(),10000);をコメントアウトして)実行すると、ちゃんと止まってくれます。 ご存知の方がいらっしゃったら教えて下さい。 xxxx.jsの内容 --------------------------------------------------------- function fncTest(){ w_form = document.f_login; if(window.confirm("アップロードしますが、よろしいですか?")){ //アップロード w_form.action = "/cgi-bin/testUpload.cgi"; setTimeout(fncLoader(),10000); return true; } else { return false; } } function fncLoader(){ alert("Loader"); //ローダー w_form.action = "/cgi-bin/testsqlldr.cgi" return true; }

  • onMouseoutの有効な範囲

    初期状態:aaaという文字のみ表示 動作:aaaをクリックするとその下にbbb,cccというリンクが現れ、これら(aaa,bbb,cccの領域)からマウスアウトしたら、bbb,cccが消える というものを作る為に、以下のコードを書いてみました。 <div onMouseout="this.childNodes[1].style.display='none'"><p onClick="this.parentNode.childNodes[1].style.display='block'">aaa</p><ul style="display:none;"><li><a href="#">bbb</a></li><li><a href="#">ccc</a></li></ul></div> 「ブラウザによりノードのカウント方法が異なり挙動が変わる」のを防ぐために改行をなくしましたが、見やすくするとこうなります↓ <div onMouseout="this.childNodes[1].style.display='none'"> <p onClick="this.parentNode.childNodes[1].style.display='block'">aaa</p> <ul style="display:none;"> <li><a href="#">bbb</a></li> <li><a href="#">ccc</a></li> </ul> </div> これを実際に試してみると、aaaを押してリンクbbb,cccが出てきたのは良いものの、 リンクをクリックするためにマウスをbbb,cccへ移動しようとすると、 aaaから離れた時点でbbb,cccが消えてしまいます。 「div全体に」”マウスアウトしたらbbb,cccが消える”というつもりで上記のソースを書いたのですが、 divのonMouseoutはpからマウスアウトしても働いてしまうのでしょうか。 どのように修正したらよいか試行錯誤中です。 解決策があれば、どうぞよろしくお願いします。

専門家に質問してみよう