Javascript的事件綁定主要有四種方法(一下在IE中運行正常,但不保證其他瀏覽器):
1、在DOM中,直接用onXXX="fun();"進行綁定
2、在Javascript代碼中用 DOM對象.onXXX=fun 進行綁定
3、用 DOM對象.attachEvent("onXXX",fun) 進行綁定
4、用<script for="domId" event="onXXX">fun();</script> 進行綁定
例
| 代碼如下 |
複製代碼 |
<html> <head> <script type="text/javascript"> function test(){ window.alert("你投了一票"); //解除綁定 IE 專屬 //document.getElementById("tp").detachEvent("onclick",test); //W3C 標準 document.getElementById("tp").removeEventListener("click",test); } </script> </head> <body> <input type="button" id="tp" value="投票" /> </body> <script> //綁定事件監聽 IE專屬 //document.getElementById("tp").attachEvent("onclick",test); ////W3C 標準 document.getElementById("tp").addEventListener("click",test); </script> </html> |
例
| 代碼如下 |
複製代碼 |
function addEvent( obj, type, fn ) { if ( obj.attachEvent ) { obj['e'+type+fn] = fn; obj[type+fn] = function(){obj['e'+type+fn]( window.event );} obj.attachEvent( 'on'+type, obj[type+fn] ); } else obj.addEventListener( type, fn, false ); } function removeEvent( obj, type, fn ) { if ( obj.detachEvent ) { obj.detachEvent( 'on'+type, obj[type+fn] ); obj[type+fn] = null; } else obj.removeEventListener( type, fn, false ); } |
事件綁定BUG大家可參考參考。
| 代碼如下 |
複製代碼 |
<a id="link_foo">Foo</a><a id="link_foo">Foo</a> <script type="text/javascript"> function bindFooClick(){ $("#link_foo").click(function(){ console.log "asd" }); } bindFooClick(); bindFooClick(); bindFooClick(); bindFooClick(); </script> |
然後去點擊 Foo 這個串連,將會出現4個日誌輸出。
如果不小心這個事件綁定被搞得成倍增長了,那就等著暴掉吧。
所以需要在 bindFooClick 綁定事件前去掉之前的綁定
| 代碼如下 |
複製代碼 |
function bindFooClick(){ $("#link_foo").unbind("click"); $("#link_foo").bind("click", function(){ console.log "asd" }); } |