1. 程式人生 > >jquery動態添加的元素綁定的事件不生效的問題

jquery動態添加的元素綁定的事件不生效的問題

解決 是否 {} log pre llb 打印 brush 程序

我們可以通過 $(document).on(‘click‘, ‘#xxx‘, callback) 這種形式解決。

原因,一般情況下,我們是通過 $(‘#xxx‘).click(callback) 這種形式去綁定,這種綁定之所以生效是因為,我們程序加載 $(function(){}) 的時候綁定了回調,而動態添加上去的,我們並沒有去綁定。

所以動態添加的元素,點擊的時候並不會觸發我們想要的效果。但是實際上,在我們點擊的時候,還是產生了點擊事件,只是這個事件沒有被我們的預期回調處理,因為我們的回調沒有和這個元素關聯起來。

jquery 的事件處理函數中,回調的第一個參數就是事件,我們打印一下這個事件,就可以知道,這個事件包含了產生該事件的目標 html 元素。

$(‘.level‘).change(function(e){window.e = e;})
console.log(e);

並且我們也知道,事件是會冒泡的,也就是說,如果我們添加的元素沒有綁定事件,沒有捕獲事件,它就會冒泡,看它上一級是否有捕獲,然後一直到 body->document->html 這些元素。

也就是說,我們動態添加的元素,產生的事件可以在他們父級的元素上獲取,比如:

$(document).on(‘click‘, ‘#xxx‘, function(){
   // 事件處理函數 
});

這樣一來,我們動態添加的元素,雖然本身沒有綁定處理函數,但是會在他們的父級元素捕獲並處理了。

jquery動態添加的元素綁定的事件不生效的問題