jquery動態添加的元素綁定的事件不生效的問題
阿新 • • 發佈:2017-12-18
解決 是否 {} 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動態添加的元素綁定的事件不生效的問題