首页 >web前端 >js教程 >为什么我的'onClick”事件监听器在 IE8 中不起作用,如何修复它?

为什么我的'onClick”事件监听器在 IE8 中不起作用,如何修复它?

Patricia Arquette
Patricia Arquette原创
2024-11-28 08:44:14638浏览

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。
  • 提供的 polyfill 规范了一些事件属性,但不是全部。考虑使用像 jQuery 这样的库来进行全面的事件处理。

以上是为什么我的'onClick”事件监听器在 IE8 中不起作用,如何修复它?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn