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";
}