0

動的にロードされた後にドロップダウン値を選択する方法を探しています (json 値を使用)。ロードが完了してからやりたいです。

次に例を示します。

 $.ajax({
    url:"/echo/json/",
    data:data,
    type:"POST",
    success:function(response)
    {
        console.log(response);
       var items = '<option value="0">-- All --</option>';
     $.each(response, function (i, channel) {
         items += "<option value='" + channel.Value + "'>" + channel.Text + "</option>";
     });       

     $('#PromotionFilter_Channel_ID').html(items);
        // HERE IT WORKS :$("#PromotionFilter_Channel_ID").val(3);
    }
});

//test doesn't work
$("#PromotionFilter_Channel_ID").val(3);

フィドルのサンプル: http://jsfiddle.net/mrflo/UdaNA/2/

ご協力いただきありがとうございます !

4

3 に答える 3

3

ajax 呼び出しがトリガーされると、ajax 呼び出しはデフォルトで非同期であるため、コードは実行フローを継続します。選択した値を設定しようとすると、コンボ ボックスはまだ設定されていません。

ajax 呼び出しは同期モードで実行できますが、通常は正しい方法ではありません。成功のコールバックで選択した値を割り当てる必要があります。

于 2013-08-01T12:54:57.487 に答える
1

あなたはこれを試すことができます

complete:function(){    
        $("#PromotionFilter_Channel_ID").val(3);
    }

フィドルを修正しました

デモ

于 2013-08-01T13:08:44.040 に答える
1

注意してください、ajax は非同期です! これは、オプションを選択しようとしている間、ajaxcall がまだビジーである可能性があることを意味します。ajaxcall の oncomplete でこれが必要です。これは、要求されたページが遅いか、接続が最適でない場合に発生する可能性があります。

ajaxrequest がまだその仕事をしている間、残りの JavaScript は続行されます。まだ存在しないオプションを選択しようとしています! ここではミリ秒単位で考えていることを忘れないでください。

あなたは実際に自分で答えを出しているのです。

$("#PromotionFilter_Channel_ID").find('option[value="3"]'); // or more native:

または

$("#PromotionFilter_Channel_ID")[0].selectedIndex = 3; // or 2, not sure if 0 based-index
于 2013-08-01T12:53:20.820 に答える