jQuery .val(#) 在 AJAX 调用后不会更改选择 - 如果调试/暂停,则有效

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

本文关键字:如果 选择 调试 有效 暂停 val AJAX 调用 jQuery      更新时间:2023-09-26

我有一个有趣的问题 - 当我执行 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(( 方法。当我取回新的值集时 - 我仍然需要它来预先填充旧的"约会"。

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

这将不执行任何操作,并且会选择重新创建的列表中的第一个元素。

但是,如果我在以下位置放置断点:

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

然后似乎已经过去了足够的时间来更改此下拉列表 - 如果有断点并且我继续 - 如果我正在调试 Javascript,下拉列表将更改回我想要的值。

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

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

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

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

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

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