Javascript 单击处理程序返回false不会';我不能在Firefox中工作

Javascript 单击处理程序返回false不会';我不能在Firefox中工作,javascript,events,firefox,cross-browser,Javascript,Events,Firefox,Cross Browser,在下面的示例中,return false似乎不能阻止在Firefox 3.6或Chrome 10中单击链接后的默认操作(因为页面会滚动到顶部),但可以在Internet Explorer中使用 使用event.preventDefault()可以满足我的需要,但我想知道为什么return false对其他人不起作用 旁注:我不需要支持Internet Explorer <script> addEventListener("DOMContentLoaded", function()

在下面的示例中,
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>

addEventListener(“DOMContentLoaded”,函数(){
document.getElementById(“link”).addEventListener(“单击”,函数)(){
警报(“单击!”);
返回false;
},假);
警报(“单击绑定处理程序!”);
},假);
你说“
preventDefault()
有帮助”,但你说它不起作用?我不太明白。你试过这个吗:

addEventListener("DOMContentLoaded", function() {
    document.getElementById("link").addEventListener("click", function(e) {
        alert("Clicked!");
        e.preventDefault();
        return false;
    }, false);
    alert("Click handler bound!");
}, false);

return false
可跨浏览器工作,但仅适用于指定了“DOM0”方式的事件处理程序,例如

document.getElementById("link").onclick = function() {
    alert("Clicked!");
    return false;
};
对于通过
addEventListener()
分配给DOM级别2的事件处理程序,必须使用
preventDefault()

对于通过IE中的
attachEvent()
附加的事件侦听器,
return false
window.event.returnValue=false
将执行以下操作:

document.getElementById("link").attachEvent("onclick", function() {
    alert("Clicked!");
    return false;
});

我在return false方法中遇到了一些跨浏览器问题

我很幸运地用以下内容替换了类似的href:

function removeLink(elementName) {
   var o = document.getElementById(elementName);
   o.href = 'javascript: (function(){})();';
   o.target = "_self";
}
我发现href属性中的这个空函数是最简单的

我添加了target_self部分,因为当我开发时,我偶尔会在新窗口/选项卡中打开这些链接(我想成为悬停框)。他们需要指向当前窗口才能真正无所作为。。。哈哈

希望这对任何人都有帮助


Brynn

在Chrome中也不起作用()。从答案来看,它现在起作用了。很抱歉,不清楚。这个版本有效。我想说的是,仅仅
返回false
是不起作用的,但是使用
preventDefault()
会有所帮助。我不想使用
preventDefault()
,因为
returnfalse
更短,而且更交叉。@Eugene:啊,我明白了。如果
returnfalse
不适用于其他浏览器,那么它就不是crossbrowser。我很确定
return false
适用于IE,而
preventDefault()
适用于所有其他。你错了。返回false对两者都适用,
event.preventDefault()
适用于W3C模型,
window.event.returnValue=false
适用于IE。来源:@Eugene:如果它不起作用,你不认为你应该使用它的替代方案,因为你不尝试支持IE。除非你的空间有限,从13个字符到19个字符并没有什么大不了的。首先,我想知道为什么
returnfalse
不能按预期工作。这就是我问这个问题的原因。因此,如果你使用
addEventListener
attachEvent
,你必须处理
preventDefault()
returnValue
?@Eugene:不,
return false
可以处理
attachEvent()
。我已经更新了我的答案。好的,这似乎是真正的答案。非常感谢这是一个很好的回答。谢谢你!
function removeLink(elementName) {
   var o = document.getElementById(elementName);
   o.href = 'javascript: (function(){})();';
   o.target = "_self";
}