Internet Explorer 中的 addEventListener

IT技术 javascript internet-explorer internet-explorer-9 addeventlistener
2021-02-04 18:48:30

什么是等效于 Internet Explorer 9 中的元素对象?

if (!Element.prototype.addEventListener) {
    Element.prototype.addEventListener = function() { .. } 
} 

它在 Internet Explorer 中是如何工作的?

如果有一个函数等于addEventListener我不知道,请解释。

任何帮助,将不胜感激。随意提出一种完全不同的解决问题的方法。

6个回答

addEventListener 是用于附加事件处理程序的正确 DOM 方法。

Internet Explorer(最高版本 8)使用了另attachEvent一种方法。

Internet Explorer 9 支持正确的addEventListener方法。

下面应该是尝试写一个跨浏览器的addEvent功能。

function addEvent(evnt, elem, func) {
   if (elem.addEventListener)  // W3C DOM
      elem.addEventListener(evnt,func,false);
   else if (elem.attachEvent) { // IE DOM
      elem.attachEvent("on"+evnt, func);
   }
   else { // No much to do
      elem["on"+evnt] = func;
   }
}
此外,由于 IE9 在兼容性视图中使用 IE7 呈现模式,因此只有 attachEvent 有效。因此,重要的是进行此检查而不是依赖于 addEventListener。
2021-03-18 18:48:30
对于 IE9 和 addEventListener 你需要一个 HTML5 <!DOCTYPE html>
2021-03-21 18:48:30
最后一个条件还应包括"on"+.
2021-03-27 18:48:30
@punite 希望我能对该评论进行更多投票。很重要的一点
2021-04-02 18:48:30

约翰Resig的,jQuery的作者,他提交的跨浏览器实现的版本addEvent,并removeEvent与IE的不当或不存在规避的兼容性问题addEventListener

function addEvent( obj, type, fn ) {
  if ( obj.attachEvent ) {
    obj['e'+type+fn] = fn;
    obj[type+fn] = function(){obj['e'+type+fn]( window.event );}
    obj.attachEvent( 'on'+type, obj[type+fn] );
  } else
    obj.addEventListener( type, fn, false );
}
function removeEvent( obj, type, fn ) {
  if ( obj.detachEvent ) {
    obj.detachEvent( 'on'+type, obj[type+fn] );
    obj[type+fn] = null;
  } else
    obj.removeEventListener( type, fn, false );
}

资料来源:http : //ejohn.org/projects/flexible-javascript-events/

这段代码除了添加事件监听器之外,还尝试将回调 fn 绑定到 obj,但这是多余的,因为每个使用 JS 的人都应该已经知道this.
2021-03-21 18:48:30
如果您将 John Resig 介绍为jQuery的作者,您将获得更多选票
2021-04-06 18:48:30
这个实现并不完整。它缺少 useCapture 参数。
2021-04-10 18:48:30

我正在使用此解决方案并在 IE8 或更高版本中工作。

if (typeof Element.prototype.addEventListener === 'undefined') {
    Element.prototype.addEventListener = function (e, callback) {
      e = 'on' + e;
      return this.attachEvent(e, callback);
    };
  }

接着:

<button class="click-me">Say Hello</button>

<script>
  document.querySelectorAll('.click-me')[0].addEventListener('click', function () {
    console.log('Hello');
  });
</script>

这将适用于 IE8 和 Chrome、Firefox 等。

我有 Element 问题(类型未定义)
2021-03-23 18:48:30
检查您的文档类型版本,这应该是 html5 doctype
2021-03-27 18:48:30

正如 Delan 所说,您希望对较新版本使用 addEventListener 和对旧版本使用 attachEvent 的组合。

您将在MDN上找到有关事件侦听器的更多信息(请注意,在您的侦听器中,有一些关于 'this' 值的警告)。

您还可以使用像jQuery这样的框架来完全抽象事件处理。

$("#someelementid").bind("click", function (event) {
   // etc... $(this) is whetver caused the event
});

这是为那些喜欢漂亮代码的人准备的东西。

function addEventListener(obj,evt,func){
    if ('addEventListener' in window){
        obj.addEventListener(evt,func, false);
    } else if ('attachEvent' in window){//IE
        obj.attachEvent('on'+evt,func);
    }
}

无耻地从Iframe-Resizer窃取