1

ドキュメントの準備ができたときに呼び出されるキューに同一の機能を追加するいくつかのスクリプト ブロックを吐き出すコードがあります。例えば:

$(document).ready(function(){
    alert('hey');
});
$(document).ready(function(){
    alert('hey');
});
$(document).ready(function(){
    alert('hey');
});

これにより問題が発生することはありませんが、もちろん同じコードを何度も呼び出す必要はありません。

繰り返されるブロックを生成するコードを変更せずに、jquery に最初のコード ブロックのみを実行させ、残りをスキップさせる方法はありますか?

繰り返しコードの前後にレディキューが別の機能を持っている可能性があることに注意してください。

4

1 に答える 1

1

オブジェクト リテラルを使用して重複したコードをラップし、一度呼び出されたときにブール値を設定して、再度実行されないようにします。

$(document).ready(function(){
    DuplicateHelper.SomeMethod1();
});
$(document).ready(function(){
    DuplicateHelper.SomeMethod1();
});
$(document).ready(function(){
    DuplicateHelper.SomeMethod1();
});

var DuplicateHelper = {
    HasMethod1Run: false,

    SomeMethod1: function() {
        if (!this.HasMethod1Run) {
            // do logic

            this.HasMethod1Run = true;
        }
    }
}

編集

コードを動的に生成する場合は、コードにオブジェクト リテラルを使用する必要はありませんが、ブール値で同じ原則を使用できます。

var runCode = true;

$(document).ready(function(){
    if (runCode) {
        DuplicateHelper.SomeMethod1();
        runCode = false;
    }
});
$(document).ready(function(){
    if (runCode) {
        DuplicateHelper.SomeMethod1();
        runCode = false;
    }
});
$(document).ready(function(){
    if (runCode) {
        DuplicateHelper.SomeMethod1();
        runCode = false;
    }
});

ただし、この状況はソリューションのアーキテクチャの他の場所に問題があることを示しているという netbrain の意見に同意します。

于 2011-05-18T08:20:31.813 に答える