【发布时间】:2014-01-09 23:58:41
【问题描述】:
我一直在试图理解为什么有时 IE8 不喜欢 PreventDefault 以及为什么有时它似乎没问题(没有错误)。从我读过的内容来看,包括这里的 SO 是 jquery 中的事件被规范化,因此 preventDefault 将始终与 jQuery 事件一起存在。然而,常规的 javascript 事件绑定是 ie8 需要以下解决方法时:
event.preventDefault ? event.preventDefault() : event.returnValue = false
这对吗?
所以如果你使用jQuery .click .bind .on 等来处理事件,那么PreventDefault 不会在IE8 中导致错误,例如:
$('a').on('click', function(e) {
e.preventDefault(); //no need for e.preventDefault ? e.preventDefault() : e.returnValue = false as jquery event?
//code
});
但是,如果它是一个常规的 Javascript 事件,比如 onclick,那么是否需要解决方法?
希望这是有道理的。
谢谢
【问题讨论】:
-
听起来不错
-
jQuery 事件处理程序中的
e参数不是原生事件对象,而是由 jQuery 创建的对象。 jQuery 事件对象上的.preventDefault不是原生的.preventDefault,而是像您的第一个示例一样的包装器。 -
而且仅供参考,如果您不支持 IE7 及更低版本,您可以将
.preventDefault()方法修补到Event.prototype中(如果它缺失)。 -
@cookie-monster 必须是'e'吗?如果我使用“事件”这个词而不仅仅是“e”作为参数,是否也是如此?我猜是的,但只是想确定一下,因为我看到大多数人使用 'e' 并想知道是出于这个原因,还是只是为了简单起见。
-
@Martin:您可以为参数命名为任何您想要的有效标识符。
e比event打字少。
标签: javascript jquery internet-explorer-8 preventdefault