javascript - e.preventDefault() 和 e.cancelBubble 不适用于附加的监听器

标签 javascript dom-events

我正在尝试禁用单击的链接。我有一个这样附加的 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/

相关文章:

javascript - onscroll 函数执行多个条件语句的问题

javascript - 在 GWT 页面上启用和禁用保存按钮

javascript - Twitter Bootstrap - 通过单击链接显示模态

javascript - 如何防止添加重复的arraylist对象值?

php - 在 JavaScript 中使用 HTML 变量

javascript - hash (#) vs end charCode 来自 Firefox 中的按键事件

Javascript - 返回方括号之间的字符串

javascript - 保留字错误

html - <a href=...> 在 onclick div 中

javascript - 如何捕捉 stopPropagation 事件