javascript - tag - range addeventlistener




IE8에서 작동하지 않는 addEventListener (6)

동적으로 확인란을 만들었습니다. addEventListener 를 사용 addEventListener Google 크롬 및 Firefox 에서 작동 하지만 Internet Explorer 8에서는 작동하지 않는 체크 상자를 클릭하여 함수를 호출했습니다. 이것은 내 코드입니다.

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

setCheckedValues 는 내 이벤트 처리기입니다.


IE9 이전의 IE 버전에서는 attachEvent 를 사용해야합니다. addEventListener 가 정의되어 있는지 여부 addEventListener 감지하고 그렇지 않은 경우 attachEvent 사용합니다.

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

IE11은 attachEvent 를 제거 합니다.

참조 :


IE는 버전 9까지 addEventListener 지원하지 않으므로 attachEvent 를 사용해야합니다. 여기에 예제가 있습니다.

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

시험:

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

업데이트 :: IE9 이전 버전의 Internet Explorer에서는 attachEvent 메서드를 사용하여 지정된 Listener를 호출 된 EventTarget 에 등록해야합니다. 다른 addEventListeneraddEventListener 사용해야합니다.


아래 addEvent () 함수를 사용하여 대부분의 이벤트를 추가 할 수 있지만 XMLHttpRequest.attachEvent() 를 사용해야하므로 XMLHttpRequest.attachEvent() 지원하지 않기 때문에 IE8에서 오류가 발생하는 경우 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) {
}

이것은 또한 간단한 크로스 브라우저 솔루션입니다.

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

물론 '클릭'대신 모든 이벤트가 가능합니다.


이벤트 처리를 다른 요소 (예 : 테이블)에 위임하면 작업이 더 쉽고 성능이 향상됩니다.

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

});

이런 식으로 하나의 이벤트 처리기 만 갖게되며 새로 추가 된 요소에 대해서도 작동합니다. jQuery> = 1.7이 필요합니다.

그렇지 않으면 delegate ()를 사용하십시오.

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

});




addeventlistener