2

変数チェック; function showLoader() { $('#mc_signup_form').prepend(' 読み込み中 …'); check_init(); }

    function check_init() {
        check = setInterval('check_trigger()', 300);
    }

    function check_clear() {
        clearInterval(check);
    }

    function check_trigger() {
        if ( $('.mc_error_msg').length == 0 || $('.mc_success_msg').length == 0 ) {
            $('#mc_signup_form .loading').remove();
            check_clear();
        }
    }

ブラウザが check_trigger() が存在しないと言い続けるのはなぜだろうか? showLoader() 関数内で setInterval を開始しています。check_trigger をトリガーする必要があります。2 つの div (.mc_error_msg または .mc_success_msg) のいずれかが存在する場合、間隔をクリアしたいと考えています。

私は何を間違っていますか?

4

5 に答える 5

1

check_triggerは、一重引用符または二重引用符の外側でのみ削除する必要があります。

于 2010-08-04T05:42:08.017 に答える
1

ここでのさまざまな提案を組み合わせることは、定義されている範囲に関係なく機能する単純化されたバージョンです。

function showLoader () {
    $('#mc_signup_form').prepend('<span class="loading"> loading &hellip;</span>');
    setTimeout (function check_trigger () {
      if ( $('.mc_error_msg').length == 0 || $('.mc_success_msg').length == 0 ) {
        $('#mc_signup_form .loading').remove();
      } else {
        setTimeout (check_trigger, 300);
      }   
    }, 300); 
}
于 2010-08-04T06:17:53.730 に答える
1

二重評価を避ける

その関数を に入れることでquotes、ECMA-/Javascript はevalそのコードを実行しますが、これは信じられないほど遅くなります。したがって、常にfunction referencewithing setTimeout/を使用してくださいsetInterval:

setInterval(function(){
    check_trigger();
}, 300);

または直接

setInterval(check_trigger, 300);

問題の要素をどこかで自分で削除する場合は、orメソッドをフックするのも興味深いアプローチかもしれません(それらを呼び出して要素を削除する場合)。jQuery .remove().detach()

それは次のようになります。

var hookRemove = $.fn.remove;

$.fn.remove    = function(){
    if(this.id === 'something'){
       // hoorray! we found it
    }

    hookRemove.apply(this, arguments);
};

フック内で扱っていることを忘れないでくださいjQuery object。したがって、実際には要素thisの である可能性もあります。wrapped setしたがって、への呼び出し

this.each(function(){
});

フック内は、チェックのためにもっと保存する必要があります。そうすればexact、オブジェクトがいつ削除されたのかを知ることができますintervall timer

于 2010-08-04T05:52:38.940 に答える
1

また、グローバル変数を取り除くことができるように、setInterval の代わりに setTimeout を使用します。

于 2010-08-04T05:53:44.047 に答える
0

文字列をに渡すsetTimeoutsetInterval、問題が発生します:)

試す:

setInterval(check_trigger, 300);
于 2010-08-04T05:42:42.757 に答える