JS li タグ Onclick イベントが IE8 で機能しない
IE8 ブラウザーで li onclick イベントが機能しないという問題が報告されています。実際、IE8 は addEventListener メソッドをサポートしていません。これに対処するには、非標準の前身であるattachEventを利用する必要があります。
attachEventフックの実装
次の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 中国語 Web サイトの他の関連記事を参照してください。