1

Javascript 関数do_whenを使用して別の関数を評価し続け、true が返されたらアクションを実行しています。ここで関数を見つけました:javascript、何かが真になるのを待ってからアクションを実行します

do_when関数 は次のとおりです。

function do_when(predicate, action, timeout_step) {
    if (predicate()) {
        action();
    } else {
        setTimeout(do_when, timeout_step, predicate, action, timeout_step);
    }
}

私はそれを使ってjQuery関数を呼び出しています:

do_when(function() {return tabledrawn;},
    function() {$("#mytable tbody tr td").first().click();}, 
    100);

Firefox と Chrome ではすべて正常に動作しますが、IE9 (およびそれ以前) では失敗します。do_when具体的には、関数から呼び出されたときに「オブジェクトが必要です」というエラーが発生しsetTimeoutます。

do_whenデバッグを行うと、述語とアクションの引数は、最初に呼び出されたときに関数オブジェクトとして正しく表示されますが、setTimeout関数から再度呼び出されると、両方とも未定義として表示されます。setTimeoutIEが見たい方法に引数を提供していないようです。IE で関数オブジェクトとそのパラメーターを引数として渡す適切な方法はありますか?

編集:
SLaksの提案ごとdo_whenに、次のように変更しました:

function do_when(predicate, action, timeout_step) {
    if (predicate()) {
        action();
    } else {
        setTimeout(function () {
                       do_when(predicate, action, timeout_step);
                   }, 
                   timeout_step);
    }
}

私の問題を解決します。

4

1 に答える 1

4

に追加の引数を渡してsetTimeoutいますが、それらが関数に渡されることを期待しています。

これは非標準の Mozilla のみの機能です。

代わりに、無名関数を に渡し、必要setTimeoutな引数を指定して関数を呼び出す必要があります。

于 2012-08-17T02:50:09.110 に答える