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中文网其他相关文章!