有些時候可以使用 e.stopPropagation(); e.preventDefault();來阻止事件冒泡,和默認事件的執行。但不能阻止事件的追加。
什麼情況下要阻止事件的追加呢?
比如:
點擊“結賬”,這樣的操作時,結賬本身有自己的事件,但結賬前要判斷是否登錄。
我們可能會這樣寫:
Js代碼
復制代碼 代碼如下:
if(isLogin){ //判斷是否登錄
console.log("沒有登錄")
}else{
//結賬相關代碼
}
如果點擊“我的主頁”也有登錄判斷
登錄判斷代碼
if(isLogin){ //判斷是否登錄
console.log("沒有登錄")
}else{
//個人中心
}
如果還有更多的登錄判斷。是不是就會有更多像上面的代碼呢?後來我發現stopImmediatePropagation()這個方法, 阻止事件追加。上面的問題就不是問題了。
重要:.確保登錄判斷事件是第一個綁定的事件。
Demo代碼
復制代碼 代碼如下:
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>demo</title>
<script src="http://lib.sinaapp.com/js/jquery/1.7.2/jquery.min.js"></script>
</head>
<body>
<a href="#" class="bill isLogin">結賬 </a>
<ul>
<li class="a1 isLogin">加入收藏夾</li>
<li class="a2 isLogin">他人支付</li>
<li class="a3">加入購入車</li>
<li class="a4 isLogin">我的主頁</li>
</ul>
<script>
//最先綁定
$(".isLogin").on("click", function (e) {
if(true){ //登錄判斷
alert("沒有登錄");
e.stopImmediatePropagation();
}
return false;
});
$(".bill").on("click",function(){
alert("結賬相關內容!");
});
$(".a1").on("click",function(){
alert("a1");
});
$(".a2").on("click",function(){
alert("a2");
});
$(".a3").on("click",function(){
alert("已加入購物車");
});
$(".a4").on("click",function(){
alert("有登錄判斷");
});
</script>
</body>
</html>
其實,jquery給我們提供了查看事件的方法$._data($('.isLogin').get(0)),打開firebug,在控制台輸入。
Js代碼
$._data($('.isLogin').get(0))
會看到如下:
Js代碼
Object { events={...}, handle=function()}
點擊可以看到事件數組,方便查看元素上綁定了什麼樣的事件。