Re: [問題] Javascrip onClick參數

看板Ajax作者 (Schrödinger's cat)時間15年前 (2010/05/01 21:14), 編輯推噓1(102)
留言3則, 3人參與, 最新討論串10/13 (看更多)
我做了一些測試。 發現: 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="" rel="nofollow">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

05/01 21:17, , 1F
可能是個ieonly的script吧,也有可能是記錯了~_~
05/01 21:17, 1F
※ 編輯: tomin 來自: 140.122.30.140 (05/01 21:20)

05/01 21:21, , 2F
加了括號就是呼叫function了,跟onload事件無直接關係
05/01 21:21, 2F

05/01 21:22, , 3F
喔 這解釋合理 跑到那行就呼叫了
05/01 21:22, 3F
文章代碼(AID): #1Bt2av6f (Ajax)
文章代碼(AID): #1Bt2av6f (Ajax)