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 }