e.preventDefault()和e.cancelBubble不能与附加的侦听器一起使用

时间:2012-07-22 20:21:31

标签: javascript javascript-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();

然而,它仍然会点击链接并加载它。我不知道是什么导致它,任何帮助将不胜感激。

更新: 我忘了提到的另一件事是我在页面上的所有锚标签元素上执行此操作。这似乎使得之后删除这些听众更加成问题。

1 个答案:

答案 0 :(得分:5)

为了使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