解決済み

setTimeoutでelementを渡す方法

  • すぐに回答を!
  • 質問No.7339158
  • 閲覧数448
  • ありがとう数2
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 80% (211/261)

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>

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

  • 回答No.1

ベストアンサー率 35% (1452/4146)

コードが間違っているからよ

setTimeout("bbb('"+m+"',"+p+")",1000);
だと
function bbb(m,p)のmには
文字列
[object]
が入ってしまうわよ

setTimeoutで呼び出す関数に引数を渡したい場合は
次のように書くといいわ

setTimeout(function(){bbb(m,p);},1000);
お礼コメント
kiseki777

お礼率 80% (211/261)

解決しました。ありがとうございました。
投稿日時 - 2012-03-11 01:43:13
Be MORE 7・12 OK-チップでイイコトはじまる

その他の回答 (全1件)

  • 回答No.2

ベストアンサー率 60% (79/130)

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

お礼率 80% (211/261)

参考にさせていただきます。ありがとうございました。
投稿日時 - 2012-03-11 01:44:34
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


より良い社会へ。感謝経済プロジェクト始動

ピックアップ

ページ先頭へ