• ベストアンサー

イベントハンドラに設定された関数を取得し、実行するには?

<html>   <body>     <script language="JavaScript" type="text/javascript">       function test(){         alert("testです")       }     </script>     <input id="btntest" type="button" value="test" onclick="test()"/>   </body> </html> このhtml文書に対し、 ・test(); ・document.getElementById("btntest").click;(ByTagName等を使用しても同じ方法とする) 上記方法以外にJavaScriptを用いて、 test()を実行するにはどうすればよいでしょうか? var eventobj = document.getElementById("btntest").onclick; eval(eventobj); 上記みたいな形でevalをよくわからずに試してみましたがダメでした。

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

  • ベストアンサー
  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.2

関数もオブジェクトとして取得できるし、取得したオブジェクトも関数型になるのでカッコを付ければ呼び出し・実行できます。 <html> <body> <script language="JavaScript" type="text/javascript"> function test(){ alert("テストです") } function test2(){ var evHandler = document.getElementById("btntest").onclick; //alert(typeof(evHandler));//onclickとそれを保存した変数は関数型 //カッコを付ければそれの呼び出し。 evHandler(); } </script> <input id="btntest" type="button" value="test" onclick="test()"/> <input id="btntest2" type="button" value="test2" onclick="test2()"/> </body> </html>

OKbokuzyo
質問者

お礼

おぉ!そうか、なるほど。 そういえば無名関数に名前を与える次のような有名なパターンがありますね。 var func = function(){} これを実行するときは、func();とするわけですし、 それと同じことなんですね。 とてもすっきりしました。 回答ありがとうございました。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

なにをしたいのかよくわかりませんが、かっこをつけるだけでは? <html> <body> <script language="JavaScript" type="text/javascript"> function test(){ alert("testです") } </script> <input id="btntest" type="button" value="test" onclick="test()"/> </body> </html> <script> document.getElementById("btntest").click(); </script>

OKbokuzyo
質問者

お礼

回答ありがとうございました。

OKbokuzyo
質問者

補足

すみません、カッコは付け忘れです。 document.getElementById("btntest").click(); 以外の方法でお願いします。 やりたいこととしては、 イベントハンドラを変数などでいったん保持し、 それを再度実行できるのか?ということです。

関連するQ&A