由于需要在代碼中根據實際需要動态修改onclick事件的處理程式,于是我查找了一下csdn和msdn,找到了一些方法。但是試過之後發現都不起作用。
1.使用setAttribute方法。
setAttribute("onClick","funcA(argA,argB)",0)
結果是onClick屬性确實被賦予了"funcA(argA,argB)",但是卻隻是一個字元串,無法運作這個函數。而我把"funcA(argA,argB)"的引号去掉以後,卻又沒有反應了。
2.使用attachEvent方法
attachEvent("onClick",funcA(argA,argB))
結果似乎并不奏效。attachEvent的第二個參數需要一個指向函數的指針,我這裡函數加上了參數,結果就根本不起作用了。
3.迫不得已,我專門寫了一個臨時的函數funcB(),裡面隻有一條語句:funcA(argA,argB)。然後使用attachEvent("onClick",funcB),結果是仍然沒有起作用——我不知道這裡是否需要配合dettachEvent的使用,如果需要,我也很難得到onClick事件原先指向的函數。
4.我仍然使用上面的臨時函數funcB(),使用setAttribute("onClick",funcB,0),結果這次成功了。
事情總算圓滿解決了,但是仍然有很多值得思考的地方。為什麼使用前面3種方法都不行呢?如果不寫臨時函數,能完成需要的功能嗎?這些我都不是很清楚,希望各位能夠給我一些指點和參考。
附:調試環境:win2000 pro, ie 6.0
問題點數:200、回複次數:13
Top
1 樓meizz(梅花雪)回複于 2002-11-29 09:44:30 得分 0 不懂你為什麼沒有成功,到少我這裡測試是通過的 win2k server IE 6.0
<span id=aa>asdfghjkl</span><br>
<input type=button value=click οnclick=cc()>
<script language=javascript>
function cc()
{
document.all.aa.attachEvent("onclick",bb);
}
function bb()
alert("ok");
</script>
2 樓runmin()回複于 2002-11-29 09:47:03 得分 0 <body οnlοad="alert()">
</body>
<script>
document.body.onload = "";
</script>
如果沒有alert改變就成功。
3 樓runmin()回複于 2002-11-29 09:50:25 得分 50<body οnlοad="alert()">
document.body.onload = Function("alert('changed')");
4 樓Lostinet(每晚 8:00 見)回複于 2002-11-29 09:54:06 得分 50<body>
function MyFunction(arg1,arg2)
alert(arg1+":"+arg2);
var a="aa";
var b="bb";
document.body.attachEvent("onclick",GetTheFunction(a,b));
a="11";
b="22";
MyFunction(a,b);
function GetTheFunction(x,y)
return Proxy;
function Proxy()
return MyFunction(x,y);
5 樓emu(月亮不在手指尖上)回複于 2002-11-29 10:00:26 得分 50帶參數的可以這麼寫(IE5下面通過):
document.all.aa.attachEvent("onclick",new Function("alert('ok')"));
6 樓meizz(梅花雪)回複于 2002-11-29 10:04:32 得分 50還有一種很好的辦法就是你在函數裡直接定義某個控件的某個事件.
<span id=aa>asdfghjkl</span>
function document.all.aa.onclick()
alert("這已經是重新定義過後的函數!");
7 樓wangxj0600(閉門思過中)回複于 2002-11-29 10:21:34 得分 0 <button οnclick=bb() id=aa>dsf</button>
<button οnclick="document.all.aa.οnclick=cc" id=dd >dsf</button>
function bb(){alert("first");}
function cc(){alert("changed");}
8 樓walkingpoison(walkingpoison)回複于 2002-11-29 10:27:54 得分 0 meizz(梅花雨):我這裡就是不成功的原因就是,我調用的函數是有參數的,寫法跟不帶參數的相同是不行的。
經過測試,我發現obj.attachEvent("onclick",new Function("funcA(argA,argB)"))的方法在我這裡仍然不行。
不過obj.οnclick=Function("funcA(argA,argB)"))的方法通過測試為可用。
Lostinet(迷失網絡)的方法比較複雜,我還沒有進行測試。但是我覺得document.body.attachEvent("onclick",GetTheFunction(a,b));這句有可能不行,因為帶參數的我從來沒有調試通過。
9 樓walkingpoison(walkingpoison)回複于 2002-11-29 10:34:36 得分 0 wangxj0600(旁觀拍手笑疏狂,疏又何妨,狂又何妨)你可以試一下帶有參數的情況,代碼會略有不同的。
經過測試,我上面提到的第4種方法可以改進為setAttribute("onclick",Function("funcA(argA,argB)"),0)。
我想主要問題還是在這個Function上面吧,通過轉換就可以正常使用了。
10 樓walkingpoison(walkingpoison)回複于 2002-11-29 10:59:43 得分 0 總結:
在調用帶參數的函數的時候,可以用兩種方法
1.使用obj.οnclick=Function("funcA(argA,argB)"))的方法直接修改。
2.使用setAttribute方法,obj.setAttribute("onclick",Function("funcA(argA,argB)"),0)。
經過測試,attachEvent方法仍然不可用。還有待探讨。