可以使用 e.stopPropagation(); e.preventDefault();來阻止事件冒泡,和預設事件的執行。但不能阻止事件的追加,如要追加,請看下面的實作方法
有些時候可以使用e.stopPropagation(); e.preventDefault();來阻止事件冒泡,和預設事件的執行。但不能阻止事件的追加。
什麼情況下要阻止事件的追加呢?
例如:
點擊“結帳”,這樣的操作時,結帳本身有自己的事件,但結帳前要判斷是否登入。
我們可能會這樣寫:
Js程式碼
程式碼如下:
if(isLogin){ //判断是否登录 console.log("没有登录") }else{ //结账相关代码 } 如果点击“我的主页”也有登录判断 登录判断代码 if(isLogin){ //判断是否登录 console.log("没有登录") }else{ //个人中心 }
如果還有更多的登入判斷。是不是就會有更多像上面的程式碼呢?後來我發現stopImmediatePropagation()這個方法, 阻止事件追加。上面的問題就不是問題了。
重要:.確保登入判斷事件是第一個綁定的事件。
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">结账 </a> <ul> <li class="a1 isLogin">加入收藏夹</li> <li class="a2 isLogin">他人支付</li> <li>加入购入车</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()}
點擊可以看到事件陣列,方便查看元素上綁定什麼樣的事件。
以上是js阻止事件追加的具體實作方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!