0

チェックボックスがたくさんある Web フォームがあります。特定のボックスをクリックすると、より多くのデータを含む特定の div が表示/非表示になります。div が適切に非表示/表示されたら、書式設定コマンドを実行して、それらを適切に整理および色付けします。

一部のチェックボックスは他のチェックボックスに依存しており、カスケード スキームが実装されるため、複数のチェックボックスの状態が一度に変化する可能性があります。

チェックボックスごとにコードを記述する代わりに、ショートカットを使用して、すべてのチェックボックスを同じ方法で処理することにしました。私はそのようになりました(ポイントを作るために2つのチェックボックス/ divを使用して、もっとたくさんあります):

jQuery(document).ready(function () {

    alternateDivs();

    jQuery('#AccessCAS, #CAS_LELOCSpecific').on('click', function () {
        showHide();
    });

});

function showHide() {

    var theChecks = [
        {
            checkId: 'AccessCAS',
            divId: 'divCAS'
        },
        {
            checkId: 'CAS_LELOCSpecific',
            divId: 'divLELOC'
        }
    ];

        var pendingChanges = 0;

    for (i = 0; i < theChecks.length; i++) {
        var checked = jQuery('#' + theChecks[i].checkId).is(':checked');
        var visible = jQuery('#' + theChecks[i].divId).is(':visible')
        if (checked && !visible) {
            pendingChanges++;
            jQuery('#' + theChecks[i].divId).fadeIn(400, function () {
                pendingChanges--;
            });
        } else if (!checked && visible) {
            pendingChanges++;
            jQuery('#' + theChecks[i].divId).fadeOut(400, function () {
                pendingChanges--;
            });
        }
    }
//check for pending changes

}

function alternateDivs() {
    jQuery('.formTable:visible:odd').css('background-color', '#eeb');
    jQuery('.formTable:visible:even').css('background-color', '#eef');
}

表示されるはずのすべての div が適切に表示されることを確認する必要があります。つまり、alternateDivs(). pendingChangesdiv が遷移するときに値が増減するように設定したことがわかります。

私がやりたいのは、非同期プロセスを設定して、pendingChangesがゼロに等しいときと、それが呼び出されたときをチェックすることalternateDivs()です。ユーザーエクスペリエンスを妨げないように、これを非同期にしたいと考えています。

これはある種のコールバックを介して実行できると思いますが、これは私の専門分野ではありません。非同期関数をセットアップして呼び出して、他の非同期関数が完了していることを確認し、いつ別の関数を呼び出して終了するかを確認するにはどうすればよいですか?

それが明確であることを願っています。

4

2 に答える 2

2

フェード コールバックに if ステートメントを入れてみませんか?

if(pendingChanges==0){ alternateDivs() }
于 2012-06-29T19:32:04.360 に答える
1

非同期ロード操作の終了後、ロードした各 div をチェックし、それらがすべて完了したことを確認するポーリング操作が必要です。すべての要素が確認されるまでポーリングします。

また、ロード操作ごとに「onSuccess」または「onComplete」イベントをセットアップして、フラグを投稿し、そのフラグをポーラーで使用することもできます。

ポーリング方法は次のとおりです。

load1();
load2();
loadn();

(function poll(){
   setTimeout(function(){

   if (!allAreLoaded()){
     poll();
   }

  }, 30000);
})();
于 2012-06-29T19:30:40.060 に答える