我在理解特殊的Javascript事件場景時遇到了問題。連續點擊事件的問題
爲了進一步說明,請參閱http://jsfiddle.net/UFL7X/
當使用者點擊黃色框則是第一次,我希望只有第一個點擊事件處理函數和大箱變綠色。但是兩個事件處理程序都被調用(大框變爲紅色),即使點擊發生時第二個處理程序不存在(至少我認爲)。
這怎麼解釋?
我在理解特殊的Javascript事件場景時遇到了問題。連續點擊事件的問題
爲了進一步說明,請參閱http://jsfiddle.net/UFL7X/
當使用者點擊黃色框則是第一次,我希望只有第一個點擊事件處理函數和大箱變綠色。但是兩個事件處理程序都被調用(大框變爲紅色),即使點擊發生時第二個處理程序不存在(至少我認爲)。
這怎麼解釋?
所以發生的是,你的事件冒泡的DOM。
div2
div2
點擊功能被稱爲div1
div1
div2
點擊功能結束(與隱式return true
)div1
接收冒泡單擊事件div1
點擊功能被稱爲,如果你不希望這種情況發生,那麼你需要return false
在點擊處理程序div2
編輯:請注意方式你正在組織你的JS可能不是最好的,因爲如果我點擊div2
100次,這意味着div1
現在有100個將運行的點擊事件。
我建議你做這種方式(請記住,我不知道你的要求是什麼):
$("#div2").click(function() {
$("#div1").css("background-color", "green");
return false;
});
$("#div1").click(function() {
$("#div1").css("background-color", "red");
});
原因是因爲當您點擊#div2時,您還正在跟蹤#div1的點擊。這可以通過在更改#div2點擊的顏色後執行返回false來解決。看到這個的jsfiddle一個工作版本:http://jsfiddle.net/mitchmalone/UFL7X/1/
$("#div1").live("click", function() {
$("#div1").css("background-color", "red");
});
$("#div2").live("click", function() {
$("#div1").css("background-color", "green");
return false;
});
達科是正確的 - 這種聯繫可能對您有用:HTTP:/ /www.quirksmode.org/js/events_order.html – 2011-01-27 04:52:08