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 }