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中文網其他相關文章!