有些時(shí)候可以使用 e.stopPropagation(); e.preventDefault();來(lái)阻止事件冒泡,和默認(rèn)事件的執(zhí)行。但不能阻止事件的追加。
什么情況下要阻止事件的追加呢?
比如:
點(diǎn)擊“結(jié)賬”,這樣的操作時(shí),結(jié)賬本身有自己的事件,但結(jié)賬前要判斷是否登錄。
我們可能會(huì)這樣寫:
Js代碼
代碼如下:
if(isLogin){ //判斷是否登錄 console.log("沒(méi)有登錄") }else{ //結(jié)賬相關(guān)代碼 } 如果點(diǎn)擊“我的主頁(yè)”也有登錄判斷 登錄判斷代碼 if(isLogin){ //判斷是否登錄 console.log("沒(méi)有登錄") }else{ //個(gè)人中心 }
如果還有更多的登錄判斷。是不是就會(huì)有更多像上面的代碼呢?后來(lái)我發(fā)現(xiàn)stopImmediatePropagation()這個(gè)方法, 阻止事件追加。上面的問(wèn)題就不是問(wèn)題了。
重要:.確保登錄判斷事件是第一個(gè)綁定的事件。
Demo代碼
代碼如下:
<!DOCTYPE html> <html> <head> <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">結(jié)賬 </a> <ul> <li class="a1 isLogin">加入收藏夾</li> <li class="a2 isLogin">他人支付</li> <li>加入購(gòu)入車</li> <li class="a4 isLogin">我的主頁(yè)</li> </ul> <script> //最先綁定 $(".isLogin").on("click", function (e) { if(true){ //登錄判斷 alert("沒(méi)有登錄"); e.stopImmediatePropagation(); } return false; }); $(".bill").on("click",function(){ alert("結(jié)賬相關(guān)內(nèi)容!"); }); $(".a1").on("click",function(){ alert("a1"); }); $(".a2").on("click",function(){ alert("a2"); }); $(".a3").on("click",function(){ alert("已加入購(gòu)物車"); }); $(".a4").on("click",function(){ alert("有登錄判斷"); }); </script> </body> </html>
其實(shí),jquery給我們提供了查看事件的方法$._data($('.isLogin').get(0)),打開(kāi)firebug,在控制臺(tái)輸入。
Js代碼
$._data($('.isLogin').get(0))
會(huì)看到如下:
Js代碼
Object { events={...}, handle=function()}
點(diǎn)擊可以看到事件數(shù)組,方便查看元素上綁定了什么樣的事件。
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com