jQuery為DOM動態追加事件


處理一個列表綁定,因為是一個展示項目,沒有使用復雜的插件,直接jsrender寫了個模板,但是后面有一個操作按鈕,去查看數據詳情,想到了jquery使用on進行事件委托,然后就開搞

 

最初是這樣寫的:

$(".btn-open").on("click", function () {
                alert($(this).text());
            })

當然這樣是不起作用的,因為在document reday后,.btn-open 這個元素根本還不存在呢,列表沒綁定,事件當然也幫不上的!

 

然后是這樣的:

$(".table").on("click", ".btn-open", function () {
                alert($(this).text());
            })

代碼可以看得明白,找到.table 元素,給.btn-open 追加 click事件。一般來說這樣就可以了。但是依然不行,我勒個去,我開始懷疑自己的記憶了。然后去找了下文檔。

文檔說:

事件處理只能綁定在當前被選中的元素上;而且,在您的代碼調用.on()的時候,他們必須在頁面文檔中已經存在。

好吧,在document ready時,.table確實不存在,所以 還要繼續改

$(document).on("click", ".btn-open", function () {
                alert($(this).text());
            })

終於可以工作了。

 

總結:

1.jQuery委托事件與直接綁定事件的區別:

$(“X”).on(“click”,function(){})

$(“X”).on(“click”,”選擇X的子元素”,function(){})

 

2.事件處理只能綁定到當前存在的元素身上,也就是第一個選擇器中的內容必須當前存在(這也是為什么第二段代碼不起作用的原因,因為.table不存在),所以保險起見,可以直接綁定委托事件到document上。

 

以前一直沒有仔細的閱讀文檔,對這一塊模棱兩可,今天弄清楚並記錄下來。

 

提醒自己:請閱讀文檔,然后再去懷疑人生!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM