jQuery .val(#) 不会更改 AJAX 调用后的选择 - 如果 debugging/paused 有效

jQuery .val(#) does not change selection following AJAX call - works if debugging/paused

我有一个有趣的问题 - 当我执行 AJAX 调用时,根据页面加载或输入的过滤器使用新条目刷新此约会列表下拉列表 - .val() 方法将 设置

这就是 AJAX 方法的成功之处 - 基本上它用新条目设置备份 AppointmentList 下拉列表:

                    $.map(data, function (item) {
                        $('#AppointmentList').get(0).options[$('#AppointmentList').get(0).options.length] = new Option(item.AppointmentTime, item.ID);

                    });

这就是调用基本上只包含重新填充#AppointmentList 下拉列表的 $.ajax() 方法的函数。当我取回新的一组值时 - 我仍然需要它来预填充旧的 "appointment"。

            var tempVal = $('#AppointmentList').val();
            DropDownList();
            $('#AppointmentList').val(tempVal);

这什么都不做,重新创建的列表中的第一个元素被选中。

但是 如果我在 :

上设置断点
$('#AppointmentList').val(tempVal);

然后似乎已经过了足够的时间来更改此下拉列表 - 如果存在断点并且我继续 - 如果我正在调试 Javascript.

关于如何重构它有什么想法吗?我一直在想,也许当我们实际执行 $.map() 函数时,我们可以在那里设置我们的旧值 - 但这段代码似乎有效......我是否应该在 Ajax 之间有更多时间完成,我需要再次设置 .val()。

问一个愚蠢的问题 - 找出一个愚蠢的答案 - 我猜。异步。呸

将这两行移动到 $.ajax() 调用上方的这一行:

var tempVal = $('#AppointmentList').val();

然后,将设置值的行放在内成功,但是之后$.map():

$('#AppointmentList').val(tempVal);