解決給dom元素綁定click等事件無效問題的方法

JavaScript客戶端腳本語言

Javascript 是一種由Netscape的LiveScript發展而來的原型化繼承的基於對象的動態類型的區分大小寫的客戶端腳本語言,主要目的是爲了解決服務器端語言,比如Perl,遺留的速度問題,爲客戶提供更流暢的瀏覽效果。


本文主要介紹瞭解決給dom元素綁定click等事件無效問題的方法。具有很好的參考價值,下面跟着小編一起來看下吧

之前一直遇到js插件生成的元素,click事件無效的問題,重新綁定也不行,終於找到解決方法,在此記下來。

同時加深對js事件處理機制的理解。

1. 事件被解綁

這種情況下一般不會導致click失效,但以下情況,click事件就失效了:


$(function(){
 $('.btn').unbind()
})
$('.btn').click(function(){
 //...
 })

所以,click事件要有個好習慣:


$(function(){
 $('.btn').click(function(){
 //...
 })
}) 

2. js插件異步/動態加載dom

一般含有等待時間/開始運行時間:WaitTime

此時直接綁定/監聽無效:

$(function() {
    $('.container .btn').on('click',
    function() {
        //...
    })
})

解決方法1:

$(function() {
    setTimeout(function {
        $('.container .btn').click(function() {
            //...
        })
        //.btn 加載後事件 
    },
    WaitTime)
})

解決方法2(事件委託,即委託給父元素):

$(function() {
    $('.container').on('click', '.btn',
    function() {
        //...
    })
})

3. ajax 異步加載的dom

  • 可以在done()函數體中加click事件
  • 同2中的事件委託方法。

4. 點擊鏈接無反應

以下代碼會導致a標籤有href也無法跳轉

$(function() {
    $('a').on('click',
    function(e) {
        e.preventDefault()
        //...
    })
})

解決方法:


$(function(){
 $('a').on('click',function(e){
 e.preventDefault()
 //...
 })
 $('a').unbind()
})

小結

1.事件綁定,事件監聽,事件委託 相關鏈接

2.事件捕獲與冒泡 相關鏈接


 target.addEventListener(type, listener[, options]);
 target.addEventListener(type, listener[, useCapture]);

事件捕獲

父元素先發生,子元素後

事件冒泡

子元素先發生,父元素後

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章