作者tomin (Schrödinger's cat)
看板Ajax
標題Re: [問題] Javascrip onClick參數
時間Sat May 1 21:14:31 2010
我做了一些測試。
發現:
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