setTimeout:呼出対象の関数に引数thisを渡す方法



0   名前: くままる : 2007/01/16(火) 02:08  ID:/IEXGW/O
1) setTimout関数で任意の時間処理を遅らせ、その後、関数を実行させたいのです。
2) この関数には引数を渡します。その引数は、this.idです。
3) 下記の例では、alertが実行された時点で「No1」を表示させたいのです。

ところが、メッセージには「Undefined」が表示されます。
どうしたら良いでしょうか。
このサンプルでは、いかにも動きそうもありませんが...

似たような話題はWeb上に多くあったので、いろいろ見てみたのですが、今ひとつ私のやりたいことと違っている様でした。で、ここに質問させていただきました。
宜しくお願いします。

<HTML>
<HEAD>
<script type="text/javascript">
function myFunc(x){
alert(x);
}
</script>

</HEAD>
<BODY>

<a href="javascript:void(0);" id="No1" onclick="t1=setTimeout('myFunc(this.id)', 1000)">
Click Here
</a>

</BODY>
</html>

1   名前: くままる : 2007/01/16(火) 02:08  ID:/IEXGW/O
解決しました。
onClickで関数を呼び出す前に、変数に予め値を入れてしまうという方法です。
お騒がせしました。

<a href="javascript:void(0);" id="No1" onclick='y=this.id; t1=setTimeout("myFunc(y)", 2000)'>

2   名前: 匿名 : 2007/01/16(火) 02:08  ID:Rt.j/.AI
>>1
それだったらこれで良いんじゃない?

t1 = setTimeout('myFunc(' + this.id + ')', 1000);


確かに this のスコープはややこしいので、グローバル変数を使うのも手だが、グローバル変数名が y というのは事故のもと。

3   名前: くままる : 2007/01/16(火) 02:08  ID:/IEXGW/O
それは既に試しましたが、望む結果が得られないのです。

onclick=の右辺全体をクォーテーションで囲むことで、さらに文字列の扱いが難しくなっているのだと思います。

<a href="javascript:void(0);" id="No1" onclick="t1 = setTimeout('myFunc(' + this.id + ')', 1000)">


4   名前: m035 ◆Wpzr1YKOiq : 2007/01/16(火) 02:08  [URL]  ID:LVCDPx4o
setTimeout('myFunc(\'No1\')',1000)になるようにすればいいのですから、
<a href="javascript:void(0);" id="No1" onclick="t1 = setTimeout('myFunc(\''+this.id+'\')', 1000)">

とか。

5   名前: くままる : 2007/01/16(火) 02:08  ID:i2Krktoq
なるほど、出来ました。
そんな方法があるのですね。
ありがとうございました!

一覧へ戻る