【问题标题】:JQuery PreventDefault and IE8 clarificationJQuery PreventDefault 和 IE8 说明
【发布时间】: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:您可以为参数命名为任何您想要的有效标识符。 eevent 打字少。

标签: javascript jquery internet-explorer-8 preventdefault


【解决方案1】:

是的,您的理解听起来是正确的。此外,如果您使用的是“DOM0”事件处理程序(例如 someElement.onclick = function(e) { ... }),还有一种更简单的方法可以防止在所有支持事件的浏览器中工作的浏览器默认行为:return false

var someElement = document.getElementById("someElementId");
someElement.onclick = function(e) {
    // Do some stuff
    return false;
};

但是,在这种情况下,事件不会传递给 IE window.event 获取它。

【讨论】:

  • 谢谢@Tim ,不知道为什么有人对你的答案投了反对票。不是我,我的声望点(缺乏)不允许我对答案投赞成票或反对票!
  • @Martin:别担心,偶尔的反对票不会打扰我。我想有人对仅仅提到使用 DOM0 事件处理程序就表示异议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-18
  • 1970-01-01
  • 2011-09-20
  • 2011-07-30
  • 2012-05-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多