首页 > web前端 > js教程 > 正文

为什么我的 JS `li` 标签的 `onclick` 事件在 IE8 中不起作用,如何修复?

Barbara Streisand
发布: 2024-11-28 02:14:10
原创
254 人浏览过

Why Doesn't My JS `li` Tag's `onclick` Event Work in IE8, and How Can I Fix It?

JS li 标签 Onclick 事件在 IE8 中无法运行

报告的 li onclick 事件在 IE8 浏览器中无法运行的问题源于事实上IE8不支持addEventListener方法。为了解决这个问题,我们需要利用它的非标准前身,attachEvent。

实现attachEvent Hook

以下hookEvent函数可用于处理两者中的事件符合标准的浏览器以及具有先前 Microsoft 特定机制的浏览器:

var hookEvent = (function() {
    var div;

    function standardHookEvent(element, eventName, handler) {
        element.addEventListener(eventName, handler, false);
        return element;
    }

    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.";
})();
登录后复制

集成挂钩事件处理

要在提供的示例中使用此挂钩,我们将 addEventListener 行替换为:

hookEvent(document.getElementById("hd_vertical"), "click", function(e) {
    // Event handling code
});
登录后复制

其他注意事项

IE8 也缺乏对 getElementsByClassName 的支持。作为补偿,我们可以使用 querySelectorAll 或 querySelector 来代替:

var _url = document.querySelectorAll("." + id)[1].getAttribute('href'); // Grabs the second matching element
var _url = document.querySelector("." + id).getAttribute('href'); // Grabs the first matching element
登录后复制

通过利用 hookEvent 函数并解决这些额外的 IE8 浏览器兼容性问题,li onclick 事件现在应该按预期运行。

以上是为什么我的 JS `li` 标签的 `onclick` 事件在 IE8 中不起作用,如何修复?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板