如何等到jQuery中的选择列表值发生了变化

时间:2016-07-25 10:48:43

标签: jquery

我的html页面中有5个选择列表。所有选择列表都使用来自ajax调用的json响应动态填充。在ajax成功函数中,我需要为每个选择列表设置一个值。

但是对于不同的选择列表不同的时间,选择列表的值的变化是随机的。我尝试了几种方式,我发现jQuery正在执行下一行,当需要时间来更改值并且永远不会转到上一行。

我尝试了change()函数,ready()函数,load()函数等没有成功。我需要等到上一个选择列表值发生变化。我怎样才能做到这一点。这是我的示例代码。

    var jsonParam = '';
    var serviceURL = "./someurl";
    AjaxManager.SendJson(serviceURL, jsonParam, onSuccess, onFailed);
    function onSuccess(jsonData) {
        $('#cmb1').val(jsonData.Field1);
        $('#cmb2').val(jsonData.Field2);
        $('#cmb3').val(jsonData.Field3);
        $('#cmb4').val(jsonData.Field4);
        $('#cmb5').val(jsonData.Field5);
    }

2 个答案:

答案 0 :(得分:0)

我认为你要找的是.then(),答案可能在这里: jQuery deferreds and promises - .then() vs .done()

祝你好运:)

答案 1 :(得分:0)

我不知道,这个AjaxManager是什么东西。在jQuery中,您可以使用deferred.then()并将链接链接起来。

所以你的脚本应该是这样的:

var jsonParam = '';
var serviceURL = "./someurl";
$.get(serviceURL, jsonParam, function (jsonData) {
    $('#cmb1').val(jsonData.Field1);
}).then(function () {
    $('#cmb2').val(jsonData.Field2);
}).then(function () {
    $('#cmb3').val(jsonData.Field3);
}).then(function () {
    $('#cmb4').val(jsonData.Field4);
}).then(function () {
    $('#cmb5').val(jsonData.Field5);
}).fail(function {
    //Here comes to fail
});

请注意,我使用了$.get方法。如果您需要通过post将参数传递给ajax,则只需将$.get更改为$.post

多数民众赞成。当$.get获得响应时,响应将在您的jsonData变量中,并更新#cmb1值,然后更新第二个,依此类推。最后,如果您的ajax调用失败,则调用fail方法。

修改

正如您所提到的,您会收到错误:

  

未捕获的TypeError:$(...)。val(...)。然后不是函数

您是否在页面上导入了jQuery库?

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>