JQuery PreventDefault和IE8澄清 [英] JQuery PreventDefault and IE8 clarification
问题描述
我一直试图理解为什么有时候IE8不喜欢PreventDefault,为什么有时它似乎没问题(没有错误)。从我所读到的,包括在这里的是jquery中的事件被规范化,因此preventDefault将始终与jQuery事件一起存在。但是,常规的javascript事件绑定是指ie8需要以下解决方法:
I have been trying to understand why sometimes IE8 doesn't like PreventDefault and why sometimes it seems to be OK (no errors). From what I have read, including here at SO is that events in jquery are normalised so preventDefault will always exist with a jQuery event. However regular javascript event bindings is when the following workaround is needed for ie8:
event.preventDefault ? event.preventDefault() : event.returnValue = false
这是正确的吗?
因此,如果您使用jQuery .click .bind .on等来处理事件,那么PreventDefault不会在IE8中导致错误,例如:
So if you are using jQuery .click .bind .on etc to handle an event then PreventDefault will not cause errors in IE8, such as:
$('a').on('click', function(e) {
e.preventDefault(); //no need for e.preventDefault ? e.preventDefault() : e.returnValue = false as jquery event?
//code
});
但是如果它是常规的Javascript事件,那么需要解决方法吗?
However if it is a regular Javascript event, such onclick then the workaround is needed?
希望有意义。
谢谢
推荐答案
是的,您的理解听起来是正确的。此外,如果您使用的是DOM0事件处理程序(例如 someElement.onclick = function(e){...}
),则有一种更简单的方法可以防止适用于所有支持事件的浏览器的浏览器默认行为: return false
。
Yes, your understanding sounds correct. Also, if you're using a "DOM0" event handler (e.g. someElement.onclick = function(e) { ... }
), there is a simpler way to prevent the browser default behaviour that works in all browsers that support events: return false
.
var someElement = document.getElementById("someElementId");
someElement.onclick = function(e) {
// Do some stuff
return false;
};
但是,在这种情况下,事件不会传递给IE中的事件处理程序< = 8而你必须从 window.event
获得它。
However, in this case, the event is not passed to the event handler in IE <= 8 and you have to get it from window.event
instead.
这篇关于JQuery PreventDefault和IE8澄清的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!