1
$(document).ready(function () {       
function EndSession() {

            window.close();
        };

       setTimeout("EndSession()", 10000);

});

上に表示されているのは、window.open() を使用して開かれた子ページのコードです。

問題は、EndSession を呼び出そうとした 10 秒後に、「Microsoft JScript ランタイム エラー: 'EndSession' は未定義です」というエラーがスローされることです。

ここで何が起こっているのですか?

4

3 に答える 3

4

おそらく、古い方法の「文字列」の問題は、メソッドが jQuery に使用される関数内で定義されているのに、グローバルスコープでメソッドを探していたことreadyです。

適切な参照があれば、本当に必要な関数を明示的に渡すことができます。

やってみよう:

$(document).ready(function () {       
    var endSession = function() {
        window.close();
    };

    setTimeout(endSession, 10000);
});

私は試していませんが、これでもうまくいくかもしれません:

$(document).ready(function () {       
    setTimeout(window.close, 10000);
});

ドキュメントが完全にロードされた後、意図的に時間のカウントを開始したい場合を除いて、jQuery の準備が必要かどうかはわかりません (ポップアップがすぐに閉じると非常に速くなると思います)。

于 2012-05-02T23:05:22.953 に答える
3

タイムアウトイベントがトリガーされると、指定したコードがグローバル名前空間で実行されます。

あなたのコードは"EndSession()"ですので、ブラウザはという名前のグローバル関数を見つけようとしますEndSessionEndSession()に渡した無名関数内で定義したため、そのような関数はありません$(document).ready()

したがって、EndSessionグローバルとして定義するだけで十分です。

function EndSession() {
    window.close();
};

$(document).ready(function () {
    setTimeout("EndSession()", 10000);
});

また、コンストラクターではない関数は、慣例により、小文字で始める必要があります;)

于 2012-05-02T23:07:47.903 に答える
3

それはこのようにする必要があります、

setTimeout(EndSession, 10000);

デモ

于 2012-05-02T23:04:15.637 に答える