2

ユーザーが選択できる(正常に動作する)か、場合によってはjsを介して選択する必要がある3つの連続または下位のドロップダウンメニューがあります。

オプションをシーケンスで選択できるようになる前に、js が最初のドロップダウンにデータを入力する時間を与えるために、タイムアウトを設定しました。それ以外の場合は機能しません。

問題は、setTimeout の経過時間中に何らかの形で var "i" が追加され、スクリプトがスローされることです。

考慮すべき入力が 1 つしかない場合に "i" を強制的に 0 にすると、問題なく動作します。これは動的であり、私にはできないため、この動作を停止する方法を探しています。

以下のコードは、2 番目のドロップダウンで停止します。

この場合、setTimeout は適切な解決策ですか? ありがとう。

$( document ).ready(function() {
    var ctvid = <?php echo $ctvid ;?>;
    if(ctvid !=""){
    var info = <?php echo json_encode ($info);?>;
    for (var i=0;i<ctvid;i++){
        $('#brand' + i).val(info['brand_id'][i]).change();
            setTimeout(function(){
            $('#model' + i).val(info['model_id'][i]).change(); 
            },500); 
    }   
    }
});
4

2 に答える 2

1

i内部はクロージャー内にキャプチャされません。setTimeout自己実行型の匿名関数で手動でラップしてクロージャーを作成する必要があります。

for (var i=0; i<ctvid; i++) {
    (function(i) {
        setTimeout(function() {
            $('#model' + i).val(info['model_id'][i]).change(); 
        },500); 
    })(i);
}

あなたのコードでiは、常にすべての要素の最後の値を持っています。フィドルの例はこちら

于 2013-03-28T15:27:32.850 に答える
0

接続が遅いと簡単に切断されるため、このような場合に time を使用しないことをお勧めします。私の意見では、「自動」の場合は、選択した母集団の完全な機能を確認できる要素 ( body など) にデータ プロパティを設定するのが最善です。

明確にするために:

functionB()selectAの選択に基づいて、selectBに要素を入力します。その関数で、何かが設定されているかどうかを確認します。その場合は、それを使用して、入力したばかりの selectB の項目を選択し、selectC の入力をトリガーします。

于 2013-03-28T15:19:46.620 に答える