addEventListener不能在IE8中工作

我已经dynamic地创build了一个checkbox。 我已经使用addEventListener来调用一个函数,点击checkbox,该checkbox可以在Google Chrome和Firefox中使用,但在Internet Explorer 8中不起作用 。 这是我的代码:

 var _checkbox = document.createElement("input"); _checkbox.addEventListener("click", setCheckedValues, false); 

setCheckedValues是我的事件处理程序。

尝试:

 if (_checkbox.addEventListener) { _checkbox.addEventListener("click", setCheckedValues, false); } else { _checkbox.attachEvent("onclick", setCheckedValues); } 

更新::对于IE9之前的Internet Explorer版本,应该使用attachEvent方法将指定的侦听器注册到所调用的EventTarget上,对于其他应该使用的addEventListener 。

您必须在IE9之前的IE版本中使用attachEvent 。 检测是否定义了addEventListener ,如果不是,则使用attachEvent

 if(_checkbox.addEventListener) _checkbox.addEventListener("click",setCheckedValues,false); else _checkbox.attachEvent("onclick",setCheckedValues); // ^^ -- onclick, not click 

请注意, IE11将删除attachEvent

也可以看看:

  • MDN: element.addEventListener :传统的Internet Explorer和attachEvent
  • MSDN:attachEvent方法

这也是简单的浏览器解决scheme:

 var addEvent = window.attachEvent||window.addEventListener; var event = window.attachEvent ? 'onclick' : 'click'; addEvent(event, function(){ alert('Hello!') }); 

当然不是“点击”可以是任何事件。

IE不支持addEventListener直到版本9,所以你必须使用attachEvent ,这里是一个例子:

 if (!someElement.addEventListener) { _checkbox.attachEvent("onclick", setCheckedValues); } else { _checkbox.addEventListener("click", setCheckedValues, false); } 

如果将事件处理委派给另一个元素,例如你的表,Mayb会更容易(并且具有更多的性能)

 $('idOfYourTable').on("click", "input:checkbox", function(){ }); 

这样你将只有一个事件处理程序,这也可以用于新添加的元素。 这需要jQuery> = 1.7

否则使用委托()

 $('idOfYourTable').delegate("input:checkbox", "click", function(){ }); 

您可以使用下面的addEvent()函数为大多数事情添加事件,但请注意,对于XMLHttpRequest, if (el.attachEvent)在IE8中失败,因为它不支持XMLHttpRequest.attachEvent()所以您必须使用XMLHttpRequest.onload = function() {}

 function addEvent(el, e, f) { if (el.attachEvent) { return el.attachEvent('on'+e, f); } else { return el.addEventListener(e, f, false); } } var ajax = new XMLHttpRequest(); ajax.onload = function(e) { } 

我select了基于上述答案的快速填充:

 //# Polyfill window.addEventListener = window.addEventListener || function (e, f) { window.attachEvent('on' + e, f); }; //# Standard usage window.addEventListener("message", function(){ /*...*/ }, false); 

当然,就像上面的答案不能确保window.attachEvent存在,这可能是也可能不是问题。

如果你使用jQuery,你可以写:

 $( _checkbox ).click( function( e ){ /*process event here*/ } ) 
 if (document.addEventListener) { document.addEventListener("click", attachEvent, false); } else { document.attachEvent("onclick", attachEvent); } function attachEvent(ev) { var target = ev.target || ev.srcElement; // custom code }