不使用return false阻止event默認行爲

當咱們點擊一個a標籤時,若是這個標籤的href指向了另外一個地址,那麼瀏覽器會默認跳轉到此地址。在頁面中,有時咱們須要觸發點擊事件,可是又不想觸發默認行爲,就須要阻止event的默認行爲了。javascript

常規作法

衆所周知,IE早期版本的event對象與DOM標準中的event對象並不相同,因此通常的兼容性寫法是這樣的:html

if (event.preventDefault) { event.preventDefault(); //支持DOM標準的瀏覽器 } else { event.returnValue = false; //IE }

很是規

在原生JS下

可是還有一種人,喜歡在函數結尾用return false;來阻止event默認行爲,不過這種方法覆蓋面不全,不建議使用,先來看規範是如何定義的:
W3C Document Object Model Events Specification 1.3.1版中。java

在jQuery下:

jQuery中,就不是簡單的覆蓋面和規範的問題了。在jQuery事件處理函數中調用return false;至關於同時調用了preventDefaultstopPropagation方法,這會致使當前元素的事件沒法向上冒泡,在事件代理模式下,會致使問題。node

好比,我有一個div容器,裏面是 幾個a標籤,它們的href裏分別存儲了url地址,這個url被用來動態的載入到下面的div#content中,這裏爲了簡單演示,就只把url字符串寫入到div#content中:瀏覽器

<div id="container"> <a href="/content1.html">content1</a> <a href="/content2.html">content2</a> <div id="content">我會根據點擊連接的url不一樣而改變的</div> </div>
// 爲container下的全部a標籤綁定click事件處理函數 $("#container").click(function (e) { if (e.target.nodeName == "A") { $("#content").html(e.target.href); } }); // 再爲a標籤綁定click事件處理函數,阻止默認事件 $("#container a").click(function () { return false; });

上面的代碼運行後,雖然阻止了a標籤的點擊默認行爲,但同時中止了冒泡事件,致使其外層的父元素沒法檢測到click事件,因此jQuery中請明白return false;preventDefault兩者的區別。函數

總結

不要用return false;來阻止event的默認行爲url

相關文章
相關標籤/搜索