當咱們點擊一個a
標籤時,若是這個標籤的href
指向了另外一個地址,那麼瀏覽器會默認跳轉到此地址。在頁面中,有時咱們須要觸發點擊事件,可是又不想觸發默認行爲,就須要阻止event
的默認行爲了。javascript
衆所周知,IE早期版本的event
對象與DOM標準中的event
對象並不相同,因此通常的兼容性寫法是這樣的:html
if (event.preventDefault) { event.preventDefault(); //支持DOM標準的瀏覽器 } else { event.returnValue = false; //IE }
可是還有一種人,喜歡在函數結尾用return false;
來阻止event
默認行爲,不過這種方法覆蓋面不全,不建議使用,先來看規範是如何定義的:
W3C Document Object Model Events Specification 1.3.1版中。java
jQuery中,就不是簡單的覆蓋面和規範的問題了。在jQuery事件處理函數中調用return false;
至關於同時調用了preventDefault
和stopPropagation
方法,這會致使當前元素的事件沒法向上冒泡,在事件代理模式下,會致使問題。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