javascipt中事件Binder 方法介紹

來源:互聯網
上載者:User

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"
  });
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.