2012-02-23 98 views
1

我需要在IE6 +上工作的代码,只是想检查我没有错过支持任何浏览器。防止默认操作,但不要停止传播事件

此代码的工作原理和我已经测试IE7,FF10,谷歌浏览器17,但我没有其他浏览器测试。我想知道是否有人已经做到了这一点,并知道密码是什么,有我错过了我的代码的任何浏览器支持:

if (!e) e = window.event; 

    e.returnValue = false; 

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

    return false; 
+0

用什么方法你使用绑定事件处理程序?我在问,因为你想在该方法中标准化事件对象,并且* not *在事件处理程序本身内部。一旦规范化,只需在事件处理程序中执行'e.preventDefault();'。 – 2012-02-23 16:49:50

+0

当然e.preventDefault()根本无法工作,因为IE6没有实现该方法? – Cheetah 2012-02-23 17:01:57

+0

这就是为什么你必须*规范化事件对象。 – 2012-02-23 17:19:32

回答

3

preventDefault()是W3C DOM 2级标准,所以应该执行由所有现代浏览器。

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

不过我倒是重组代码没有设置该事件的任何属性,如果你没有:

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

+1表示能力嗅探。 – harpo 2012-02-23 17:12:38