2

複数のコールバックの と で 1 つのコールバックだけが必要です。呼び出しをカウントする単純な「クラス」MultiCallbackを使用すると、解決されたようです。しかし、jQuery の fadeIn 関数は mCallback を 1 回だけ呼び出します。

mCallback を 3 回呼び出す必要があります。これは、トップ スコープ内でコールバック関数を直接使用することで発生します。

MultiCallback クラスを自分の関数でも問題なくテストしました。jQueryで複数の要素を非表示にして1つのコールバックを取得するなどの他の方法があることを知っています...私のロジックの何が問題なのか知りたいだけです。

<div id="1" style="display: none; background-color: green;"></div>
<div id="2" style="display: none; background-color: red;"></div>
<div id="3" style="display: none; background-color: blue;"></div>

<script>

    var allElements = "#1, #2, #3";
    var multiCallback = new MultiCallback( $(allElements).length, function()
            {
                console.log("NEVER ENTER CALLBACK");
            });
    $(allElements).fadeIn(400, multiCallback.mCallback());

    function MultiCallback(limit, fn)
    {
        var finishedCalls = 0;

        function mCallback()
        {
            // Just enter one time !
            if (++finishedCalls == limit)
            {
                fn();
            }
        }

        return {
            mCallback : mCallback
        }
    }

</script>
4

2 に答える 2

2

変化する

// executes function, returns undefined, passing undefined
$(allElements).fadeIn(400, multiCallback.mCallback());

// pass a reference to the function
$(allElements).fadeIn(400, multiCallback.mCallback); 
于 2012-06-22T10:21:19.160 に答える
1
  1. multiCallback.mCallback() を multiCallback.mCallback に置き換えます

  2. $(function(){ ... });その時点でDOM要素が利用できない可能性があるため、コードを内部に配置してください。

jsFiddle のコードを修正

于 2012-06-22T10:33:35.633 に答える