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);
}
Update:: Для версий 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
.
Читайте также:
Это также простое решение crossbrowser:
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);
}
Mayb это проще (и имеет большую производительность), если вы делегируете обработку событий другому элементу, например, вашей таблице
$('idOfYourTable').on("click", "input:checkbox", function(){
});
таким образом, у вас будет только один обработчик событий, и это будет работать также для вновь добавленных элементов. Для этого требуется jQuery >= 1.7
в противном случае используйте delegate ()
$('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 на основе приведенных выше ответов:
//# 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
}