我正在尝试禁用单击的链接。我有一个这样附加的 onmousedown
事件监听器。
if(document.addEventListener){
document.addEventListener("onmouseover", onMouseOverIdent, false);
document.addEventListener("onmousedown", onMouseDownIdent, false);
document.addEventListener("onmouseout", onMouseOutIdent, false);
}else{
if(document.attachEvent){
document.attachEvent("onmousedown",onMouseDownIdent);
document.attachEvent("onmouseover",onMouseOverIdent);
document.attachEvent("onmouseout", onMouseOutIdent);
}
}
在我的 onmousedown
函数中,我尝试使用 quirksmode 中的此函数:
if (!e) var e = window.event;
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
但是它仍然会点击链接并加载它。我不知道是什么原因造成的,任何帮助将不胜感激。
更新: 我忘记提及的另一件事是我正在页面上的所有 anchor 标记元素上执行此操作。这似乎使得事后删除这些监听器变得更加困难。
最佳答案
要使其不遵循 href,您应该使用 preventDefault
而不是 stopPropagation
。
对于 IE,您可以使用
e.returnValue = false;
所以它应该看起来像这样......
if (!e) var e = window.event;
e.returnValue = false;
if (e.preventDefault) e.preventDefault();
<小时/>
这假设处理程序直接位于链接上,由于您已经排除了相关代码,所以现在无法知道该处理程序。
<小时/>还有一件事,您只使用 onmousedown
事件。如果您想阻止该行为或禁用实际 click
事件的冒泡,您应该这样做...
document.addEventListener("click", ...
document.attachEvent("onclick", ...
此外,请注意 addEventListener
不应将 "on"
作为事件名称的一部分。
关于javascript - e.preventDefault() 和 e.cancelBubble 不适用于附加的监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11603709/