4 回答

TA貢獻1798條經(jīng)驗 獲得超3個贊
這不是冒泡,這是重復綁定。
DOM里的事件是這樣的,你可以想象每個DOM結(jié)構(gòu)有一張散列表,這張表一開始是空的,每次注冊一個事件回調(diào)呢,就會把這個回調(diào)記到這個表上;而事件發(fā)生的時候呢,就會找到這個表,然后一個回調(diào)一個回調(diào)的去執(zhí)行。
有個常見的誤區(qū),是以為每個DOM只有一個回調(diào),事件發(fā)生時被觸發(fā)執(zhí)行,這是不對的。事實上,注冊了一個回調(diào)就會執(zhí)行一個,而注冊了好幾個,就會挨個執(zhí)行。
題目中的錯誤也挺常見,是一個事件回調(diào)里邊注冊另一個事件回調(diào),這樣當外邊的回調(diào)執(zhí)行時,就會給里邊的DOM上掛一個回調(diào),執(zhí)行多次以后,里邊的回調(diào)也相應增多,這樣在觸發(fā)里邊DOM的時候,就會有多個回調(diào)被執(zhí)行,從而導致錯誤。
原生寫法的注冊事件其實可以拒掉具名函數(shù)事件回調(diào)的重復注冊,但在jQ里,都是匿名函數(shù)/函數(shù)表達式,原生也防不住,從而變成了常見錯誤。

TA貢獻1777條經(jīng)驗 獲得超10個贊
$(this).find(".two").click(function(e) {
e.stopPropagation();
alert($(this).html());
})

TA貢獻1788條經(jīng)驗 獲得超4個贊
$('.box .box-item .one').click(function() {
$(this).find(".two").show()
$(this).find(".two").off();
$(this).find(".two").click(function() {
alert($(this).html());
})
})
添加回答
舉報