return false影響事件冒泡
在編寫zepto, jquery的事件時,回撥函式體中不要使用 return false ,
這將阻止事件冒泡,會導致其他的函式捕捉不到事件。
比如前一陣,某位同事無意中修改了一個tap事件導致該元素無法觸發公共的統計事件,而全不知其影響。
栗子在此
//html:
<a class="related" data-gjalog="ge">一個按鈕</a>
//業務程式碼:
$('.related').on('tap', function(){
var target_url = $(this).attr('data-targeturl');
if(!target_url){
return false;
}
$.getJSON(target_url + '&callback=?');
});
//受影響的公共元件:
$('body').on('tap', '[data-gjalog]', function (e) {
...
});
解決辦法
在編寫zepto, jquery的事件時,只要不是return false, return 任何值都不會阻止事件冒泡;
線上已經修復的方式將return false改成return.
BTW, 採用return來控制條件語句的寫法可讀性不高,建議使用if, else, 三目運算表示式或改為:
$('.related .recomend3g a').on('tap', function(){
var target_url = $(this).attr('data-targeturl');
target_url && $.getJSON(target_url + '&callback=?');
});
Raw Javascript
延伸實驗原生javascript不會受到return false的影響:
var body = document.getElementsByTagName("body")[0];
var a = document.getElementsByTagName("a")[0];
body.onclick = function(ev){
var ev = ev || window.event;
var target = ev.target || ev.srcElement;
if(target.nodeName.toLowerCase() == 'a'){
console.log('js raw delegate event');
}
}
a.onclick = function(){
console.log('js raw event');
return false;
}
執行結果:兩個回撥函式都會完全執行並輸出;
相關文章
- 原生javascript的return false並不能阻止事件冒泡JavaScriptFalse事件
- JavaScript return falseJavaScriptFalse
- js中return、return true、return false的區別JSFalse
- JavaScript return false的作用JavaScriptFalse
- UITextView: 響應鍵盤的 return 事件UITextView事件
- preventDefault()與return false區別False
- jQuey return false作用是什麼False
- JavaScript 事件冒泡JavaScript事件
- 事件的冒泡事件
- jQuery 事件冒泡jQuery事件
- 事件冒泡 和 事件捕獲事件
- js跳出迴圈的方法區別( break, continue, return ) 及 $.each 的(return true 和 return false)...JSFalse
- [轉] 由表單中 onsubmit="return false;" 想到的MITFalse
- JavaScript阻止事件冒泡JavaScript事件
- jquery阻止事件冒泡jQuery事件
- jquery的冒泡事件jQuery事件
- JS事件(事件冒泡和事件捕獲)JS事件
- CSS 中 stopPropagation, preventDefault 和 return false 的區別CSSFalse
- preventDefault,stopPropagation,return false三者的區別False
- 不要用return false阻止event的預設行為False
- JQuery6:事件冒泡jQuery事件
- stopPropagation() 阻止事件冒泡事件
- jQuery如何阻止事件冒泡jQuery事件
- return與finally的執行順序的影響(skycto JEEditor)
- js 事件冒泡 事件代理 事件捕捉 this指標 bind thisJS事件指標
- 原生js如何阻止事件冒泡JS事件
- javascript阻止事件冒泡程式碼JavaScript事件
- 什麼是jquery事件冒泡jQuery事件
- zepto繫結事件改變冒泡事件流事件
- 關於js事件冒泡和事件捕獲JS事件
- javascript事件冒泡和事件捕獲型別JavaScript事件型別
- 理解js的事件冒泡和事件捕獲JS事件
- JavaScript事件冒泡、事件捕獲和阻止預設事件JavaScript事件
- PCMA:冠狀病毒對事件營銷的影響事件
- JavaScript 事件對記憶體和效能的影響JavaScript事件記憶體
- 事件的捕獲、冒泡、委託事件
- javascript事件冒泡簡單例項JavaScript事件單例
- jQuery事件冒泡程式碼例項jQuery事件