从点击处理程序返回false在Firefox中不起作用

Evg*_* A. 10 javascript firefox events cross-browser

在下面的示例中,return false在Firefox 3.6或Chrome 10中单击链接(因为页面滚动到顶部)但在Internet Explorer中工作后似乎不会阻止默认操作.

使用event.preventDefault()做我需要的,但我想知道为什么return false不与其他人一起工作.

附注:我不需要支持Internet Explorer.

<script>
  addEventListener("DOMContentLoaded", function(){
    document.getElementById("link").addEventListener("click", function(){
      alert("Clicked!");
      return false;
    }, false);
    alert("Click handler bound!");
  }, false);
</script>

<div style="margin-top: 1200px;">
  <a id="link" href="#">Click me!</a>
</div>
Run Code Online (Sandbox Code Playgroud)

Tim*_*own 28

return false跨浏览器工作,但适用于分配了"DOM0"方式的事件处理程序,例如

document.getElementById("link").onclick = function() {
    alert("Clicked!");
    return false;
};
Run Code Online (Sandbox Code Playgroud)

对于分配了DOM Level 2方式的事件处理程序addEventListener(),您必须使用preventDefault():

document.getElementById("link").addEventListener("click", function(evt) {
    alert("Clicked!");
    evt.preventDefault();
}, false);
Run Code Online (Sandbox Code Playgroud)

事件侦听器经由安装attachEvent()在IE中,任一return falsewindow.event.returnValue = false将做:

document.getElementById("link").attachEvent("onclick", function() {
    alert("Clicked!");
    return false;
});
Run Code Online (Sandbox Code Playgroud)