.attachEvent() http://msdn.microsoft.com/en-us/library/ie/ms536343%28v=vs.85%29.aspx在 IE9+ 中已弃用,并已在 IE11 中删除。
标准是.addEventListener() https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.addEventListener (MSDN 文档 http://msdn.microsoft.com/en-us/library/ie/ff975245%28v=vs.85%29.aspx)。 MDN 文档有一个关于兼容性的部分 https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.addEventListener#Compatibility.
您可以简单地运行一些功能检查代码来检查支持的功能是否存在:
if (window.addEventListener) {
// Check for addEventListener first, since IE9/10 have both,
// but you should use the standard over the deprecated IE-specific one
window.addEventListener('click', myFunc);
} else if (window.attachEvent) {
window.attachEvent('onclick', myFunc);
}
如果您必须附加大量事件侦听器,那么您可能只想将所需的侦听器附加方法缓存在变量中,并使用该变量在整个代码中附加事件,而不是对每个事件侦听器进行上述检查:
var addListener = function(){}; // Default to no-op function
if (window.addEventListener) {
addListener = window.addEventListener;
} else if (window.attachEvent) {
addListener = function(eventType, listener, useCapture) {
// attachEvent wants 'oneventType' instead of 'eventType'
window.attachEvent('on'+eventType, listener, useCapture);
};
}
// Now you can add listeners with a browser-agnostic function call!
addListener('click', myFunc);
addListener('hover', myOtherFunc);
您可以阅读更多内容重复的问题 https://stackoverflow.com/questions/6927637/addeventlistener-in-internet-explorer由 @MartyIX 在对您的问题的评论中链接。那里的答案/评论中有进一步的细微差别和方法,例如 IE9 要求<!DOCTYPE html>
为了使用.addEventListener()
.