天天看點

關于onclick時間的改變

由于需要在代碼中根據實際需要動态修改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方法仍然不可用。還有待探讨。

繼續閱讀