- ベストアンサー
イベントハンドラに設定された関数を取得し、実行するには?
<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をよくわからずに試してみましたがダメでした。
- みんなの回答 (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>
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
なにをしたいのかよくわかりませんが、かっこをつけるだけでは? <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>
お礼
回答ありがとうございました。
補足
すみません、カッコは付け忘れです。 document.getElementById("btntest").click(); 以外の方法でお願いします。 やりたいこととしては、 イベントハンドラを変数などでいったん保持し、 それを再度実行できるのか?ということです。
お礼
おぉ!そうか、なるほど。 そういえば無名関数に名前を与える次のような有名なパターンがありますね。 var func = function(){} これを実行するときは、func();とするわけですし、 それと同じことなんですね。 とてもすっきりしました。 回答ありがとうございました。