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

小心,ajax 是异步的!这意味着当您尝试选择选项时,ajaxcall 可能仍然很忙。您希望在 ajaxcall 的 oncomplete 中使用它。如果请求的页面很慢或连接不是最佳的,则可能会发生这种情况。

虽然 ajaxrequest 仍在执行其工作,但 javascript 的其余部分仍在继续。您正在尝试选择一个尚不存在的选项!请记住,您在此处以毫秒为单位进行思考。

您实际上是在自己给出答案,您想要“当 ajax 完成时”。

$("#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 回答
1

你可以试试这个

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

修改了小提琴

演示

于 2013-08-01T13:08:44.040 回答