色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

jquery delegate 執行多次

謝彥文2年前9瀏覽0評論

jQuery中的delegate() 方法可以用來監聽元素的事件,而這個事件不需要在一開始的時候就存在于DOM樹中。

對于動態添加的元素來說,我們可以將事件放在它的祖先元素上,該祖先元素必須存在于DOM結構中,通過事件冒泡機制,可以在祖先元素上監聽以后子元素中添加的新元素,這就是delegate() 方法最簡單的用法。

$(document).delegate('#test', 'click', function() {
console.log('clicked');
});

在如下代碼中,我們動態添加了一個id為“test”的元素,但是click事件卻可以被正確地觸發。

$('body').append('<div id="test">Click Me</div>');

然而,如果我們多次調用了delegate() 方法來監聽同一個祖先元素和同一個事件類型,可能會導致該事件一次執行多次。

$(document).delegate('#test', 'click', function() {
console.log('clicked');
});
$(document).delegate('#test', 'click', function() {
console.log('clicked again');
});

在以上代碼中,當id為“test”的元素被點擊時,控制臺會輸出兩次“clicked”和“clicked again”。

為了避免事件執行多次的問題,我們可以在元素上添加一個只能被執行一次的屬性,如下所示:

$(document).delegate('#test', 'click', function(e) {
if (e.target.getAttribute('clicked')) {
return;
}
console.log('clicked');
e.target.setAttribute('clicked', true);
});

這樣,在第二次點擊時,我們就直接判斷該元素是否執行過事件,如果有就直接返回,否則就執行click事件,并將clicked屬性設置為true,以此來防止事件多次執行的問題。