1

これは IE と Chrome では機能しますが、Firefox では次のエラーが表示されます。

「TypeError: 値はインターフェイス EventListener を実装していません。」

このコードは php スクリプトによって投稿されるため、Chrome でのエラーを回避するために、最初に ID が存在するかどうかを判断する if ステートメントを追加する必要がありました。

コードは次のとおりです。

HTML <a id="Logout">Logout</a>

JavaScript

if (document.getElementById("Logout") != null) {
    var Logout_Link = document.getElementById("Logout");
    Logout_Link.addEventListener('click', Logout, true);

    function Logout() {            
        var just_logged_out = 1;
        window.location.href = "logout-redirect.php";
    }
}
4

1 に答える 1

4
if (…) {
    function …() {            
        …
    }
}

無効です。関数宣言は、関数またはプログラム本体の最上位にある必要があり、ブロック内では、その動作は実装に依存します。if ステートメントの外に移動します。

function Logout() {            
    var just_logged_out = 1;
    window.location.href = "logout-redirect.php";
}

if (document.getElementById("Logout") != null) {
    var Logout_Link = document.getElementById("Logout");
    Logout_Link.addEventListener('click', Logout, true);
}

関数が[正しく]宣言されていない場合、その奇妙なエラーメッセージは何ですか? のようなものを期待していたかもしれませんWRONG ARGUMENTS ERROR: handler is 'undefined'。しかし、実際にはそうではなく、Logoutあなたのリンク要素を参照しています。そして、それは実際にはEventListenerインターフェースを実装していません (JavaScript 関数は実装しています)。

于 2013-07-24T22:00:22.333 に答える