看板 Ajax 關於我們 聯絡資訊
我做了一些測試。 發現: 1.加了括號()後,會在onload就執行,之後就不再執行,原因不明。  建議綁定事件時,不要加()。 2.用String沒有觸發eval。 結論: function無參數時,使用onclick=functionName function有參數時,使用onclick=function(){functionName(參數);} ※ 引述《TonyQ (沉默是金。)》之銘言: : ※ 引述《tomin (Schrödinger's cat)》之銘言: : : → TonyQ:其實可以啊, 不過要弄成String就是了, 呵 : : → TonyQ:我是覺得能不倚賴eval就不用囉,匿名函式清楚多了. : : → tomin:記得不能加()耶 onClick=GetInfo; 而不能是=GetInfo() : : → tomin:說也奇怪,呼叫時要(),綁定不用。而function可以加()和{} : 你也說了這兩者的差異,有 () 的時候是call function ,也就是執行, : 沒有的時候則是視為該function 的代號,把該function 指派給onclick。 : 基本上你只要抓準真正在assign給左邊時, : 右邊到底是什麼東西,就不會有困擾了。 : 條列如下: : onclick=GetInfo => function ,且沒有任何傳入值 這邊ok : onclick="GetInfo('F123');" => String : -> eval(str) : -> function(){GetInfo('F123');} 我試了沒有eval耶 onload, onclick後 什麼事都沒發生 : onclick=GetInfo('F123'); => 不明,要看執行GetInfo後會return什麼東西。 會在onload就執行GetInfo('F123'); 而onclick反而不會執行 跟我以前的經驗一樣 只是一時想不起來加了()會造成什麼問題 問題在於:執行的時間點是在一開始 反而在onclick卻不執行 不是我們想要的結果 : onclick=function(){ => function : GetInfo('F123'); : } 這也ok 主要用Fx3測試。 code: <html> <head> <script type="text/javascript" src="http://www.google.com/jsapi"></script> <script type="text/javascript">google.load("jquery", "1");</script> <script type="text/javascript"> function GetInfo(){ alert(1); } function GetInfo2(x){ alert(x); //return false; } $(function(){ /* $("#btn1").click(function(){ GetInfo2(2); }); */ //document.getElementById("btn1").onclick = GetInfo; //result: btn1 click, 1 //document.getElementById("btn1").onclick = GetInfo(); //result: onload, 1 //document.getElementById("btn1").onclick = GetInfo2; //result: btn1 click, Object MouseEvent //document.getElementById("btn1").onclick = GetInfo2(); //result: onload, undefined //document.getElementById("btn1").onclick = GetInfo2(2); //result: onload, 2; but onclick, nothing happens. //document.getElementById("btn1").onclick = "GetInfo();"; //result: nothing works //document.getElementById("btn1").onclick = "GetInfo2(2)"; //result: nothing works }); </script> </head> <body> <br><br> <input style="font-size:4em" type="button" id="btn1" value="alert"> <br><br> </body> </html> -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.122.30.140
TonyQ:可能是個ieonly的script吧,也有可能是記錯了~_~ 05/01 21:17
※ 編輯: tomin 來自: 140.122.30.140 (05/01 21:20)
No:加了括號就是呼叫function了,跟onload事件無直接關係 05/01 21:21
tomin:喔 這解釋合理 跑到那行就呼叫了 05/01 21:22