防止默认操作但不要停止传播事件

时间:2012-02-23 16:46:58

标签: javascript javascript-events event-propagation

我需要代码才能使用IE6 +,只是想检查一下我没有错过任何浏览器的支持。

此代码有效,我已在IE7,FF10,Google Chrome 17上测试过,但我没有其他浏览器可供测试。我想知道其他人是否已经这样做并知道代码是什么,我是否错过了对使用我的代码的任何浏览器的支持:

    if (!e) e = window.event;

    e.returnValue = false;

    if (e.preventDefault) e.preventDefault();

    return false;

1 个答案:

答案 0 :(得分:3)

preventDefault()是一个w3c DOM Level 2标准,所以它应该由所有现代浏览器实现。

IE6不是现代浏览器,它不实现DOM Level 2或preventDefault()。替代IE6使用设置event.returnValuefalse,正如您所做的那样。请注意,这不会影响事件冒泡(在IE6中,可以通过将event.cancelBubble设置为true来实现)。因此,您的代码应该可以在IE6以及所有现代浏览器中使用,以防止默认操作而不会停止传播。

但是如果您不需要,我会重新构造代码以不在事件上设置任何属性:

if (e.preventDefault) {
    e.preventDefault();
} else {
    e.returnValue = false;
}