addEventListener не работает в IE8
Я создал флажок динамически. Я использовал addEventListener чтобы вызвать функцию по щелчку флажка, который работает в Google Chrome и Firefox, но не работает в Internet Explorer 8. Это мой код:
var _checkbox = document.createElement("input");
_checkbox.addEventListener("click", setCheckedValues, false);
setCheckedValues мой обработчик событий.
9 ответов:
попробуй:
if (_checkbox.addEventListener) { _checkbox.addEventListener("click", setCheckedValues, false); } else { _checkbox.attachEvent("onclick", setCheckedValues); }обновление: Для версий Internet Explorer до IE9,attachEvent метод должен использоваться для регистрации указанного слушателя в EventTarget это называется, для других addEventListener должен быть использован.
вы должны использовать
attachEventв версиях IE до IE9. Определить, является лиaddEventListenerопределяется и используетсяattachEventесли это не так:if(_checkbox.addEventListener) _checkbox.addEventListener("click",setCheckedValues,false); else _checkbox.attachEvent("onclick",setCheckedValues); // ^^ -- onclick, not clickотметим, что IE11 удалит
attachEvent.Читайте также:
Это также простое кроссбраузерное решение:
var addEvent = window.attachEvent||window.addEventListener; var event = window.attachEvent ? 'onclick' : 'click'; addEvent(event, function(){ alert('Hello!') });вместо 'click' может быть любое событие, конечно.
IE не поддерживает
addEventListenerдо версии 9, так что вы должны использоватьattachEventвот пример:if (!someElement.addEventListener) { _checkbox.attachEvent("onclick", setCheckedValues); } else { _checkbox.addEventListener("click", setCheckedValues, false); }
возможно, это проще (и имеет большую производительность), если вы делегируете обработку событий другому элементу, например вашей таблице
$('idOfYourTable').on("click", "input:checkbox", function(){ });таким образом, у вас будет только один обработчик событий, и это будет работать также для вновь добавленных элементов. Для этого требуется jQuery >= 1.7
в противном случае использовать делегат()
$('idOfYourTable').delegate("input:checkbox", "click", function(){ });
вы можете использовать приведенную ниже функцию addEvent () для добавления событий для большинства вещей, но обратите внимание, что для XMLHttpRequest
if (el.attachEvent)не удастся в IE8, потому что он не поддерживаетXMLHttpRequest.attachEvent()Так что вы должны использовать .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) { }
Я выбрал быстрое заполнение на основе приведенных выше ответов:
//# 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 }
Comments