JS `li` タグの `onclick` イベントが IE8 で動作しないのはなぜですか? どうすれば修正できますか?

Barbara Streisand
リリース: 2024-11-28 02:14:10
オリジナル
255 人が閲覧しました

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

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート