Internet Explorer中的addEventListener

The*_*ask 64 javascript internet-explorer addeventlistener internet-explorer-9

Internet Explorer 9中的Element对象是什么?

if (!Element.prototype.addEventListener) {
    Element.prototype.addEventListener = function() { .. } 
} 
Run Code Online (Sandbox Code Playgroud)

它在Internet Explorer中如何工作?

如果有一个等于addEventListener和我不知道的功能,请解释.

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

use*_*064 143

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;
   }
}
Run Code Online (Sandbox Code Playgroud)

  • 对于IE9和addEventListener,您需要一个HTML5 <!DOCTYPE html> (75认同)
  • 最后一个条件还应包括"on"+`. (19认同)
  • 此外,由于IE9在兼容性视图中使用IE7渲染模式,因此只有attachEvent可以工作.因此,进行此检查而不是依赖于addEventListener非常重要. (4认同)

jch*_*ook 16

jQuery的作者John Resig提交了他的跨浏览器实现版本,addEventremoveEvent规避了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 );
}
Run Code Online (Sandbox Code Playgroud)

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

  • 如果您介绍John Resig作为**jQuery**的作者,您将获得更多选票. (3认同)

RTe*_*ldo 14

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

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

然后:

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

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

这将适用于IE8和Chrome,Firefox等.