>웹 프론트엔드 >JS 튜토리얼 >내 `onClick` 이벤트 리스너가 IE8에서 작동하지 않는 이유는 무엇이며 어떻게 해결할 수 있습니까?

내 `onClick` 이벤트 리스너가 IE8에서 작동하지 않는 이유는 무엇이며 어떻게 해결할 수 있습니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-28 08:44:14612검색

Why Doesn't My `onClick` Event Listener Work in IE8, and How Can I Fix It?

IE8 onClick 이벤트 리스너 호환성 문제

문제:
제공된 코드에서 JavaScript 이벤트 리스너는 li 요소가 IE8에서 작동하지 않습니다 browser.

해결책:

IE8에는 addEventListener 메서드가 없으므로 대체 크로스 브라우저 이벤트 처리 솔루션이 필요합니다. 다음 코드는 표준 브라우저와 레거시 브라우저 모두에서 작동하는 addEventListener에 대한 폴리필을 제공합니다.

var hookEvent = (function() {
    var div;

    // Standard-compliant browsers
    function standardHookEvent(element, eventName, handler) {
        element.addEventListener(eventName, handler, false);
        return element;
    }

    // Legacy IE browsers
    function oldIEHookEvent(element, eventName, handler) {
        element.attachEvent("on" + eventName, function(e) {
            e = e || window.event;
            e.preventDefault = oldIEPreventDefault;
            e.stopPropagation = oldIEStopPropagation;
            handler.call(element, e);
        });
        return element;
    }

    function oldIEPreventDefault() {
        this.returnValue = false;
    }

    function oldIEStopPropagation() {
        this.cancelBubble = true;
    }

    div = document.createElement('div');
    if (div.addEventListener) {
        div = undefined;
        return standardHookEvent;
    }
    if (div.attachEvent) {
        div = undefined;
        return oldIEHookEvent;
    }
    throw "Neither modern event mechanism (addEventListener nor attachEvent) is supported by this browser.";
})();

사용법:
제공된 코드에서 getElementById().addEventListener( ) 통화:

hookEvent(document.getElementById("hd_vertical"), "click", function(e) {
   // ...
});

추가 참고:

  • IE8도 getElementsByClassName을 지원하지 않습니다. 대신 querySelectorAll을 사용하세요.
  • 제공된 폴리필은 일부 이벤트 속성을 정규화하지만 전부는 아닙니다. 포괄적인 이벤트 처리를 위해 jQuery와 같은 라이브러리 사용을 고려해 보세요.

위 내용은 내 `onClick` 이벤트 리스너가 IE8에서 작동하지 않는 이유는 무엇이며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.