问题
我所拥有的是以下代码不会更新两个选择框“ select1”和“ select2”,除非我在代码之前立即有一个警报。

背景信息-
我在此页面上发布了两个变量“ sel1val”和“ sel2val”,并将它们分别分配给ID为“ sel1valtry”和“ sel2valtry”的隐藏输入框。我将这些输入框的值分配给函数中的变量,并将它们命名为“ sel1val”和“ sel2val”。如果需要,我可以发布更多代码,但这就是我所谓的“弗兰克代码” ...哈哈!因为我是新手,所以它是由许多不同样式的代码组成的。

目标-我要实现的目标是基于“ sel1val”和“ sel2val”的值设置两个选择框。只有在代码之前有警报时,才能获得正确的功能。

我尝试过的方法-我留下了一些注释掉的代码,以说明我的尝试。我曾经参加过许多论坛,而这些论坛正是我从中得到的。我怀疑警报会“重新加载”页面的javascript部分,但是我对此没有任何实际依据。我曾经尝试过“文档准备就绪”,“窗口加载”的变体,甚至还尝试过延迟来减慢速度,以防出现时间问题。我尝试过的每种方法都产生了相同的结果,因此只能在出现警报时使用。

我的基于Web的项目取得了很大的成功,而没有像这样的论坛中的宝贵资源,这是不可能的。我要感谢曾经提供过意见/解决方案的任何人,否则,我将永远无法进步。

$(document).ready(function(){
//  $(document).ajaxSuccess(function(){
//    alert("AJAX request successfully completed");
//  });
//$(window).load(function()
//window.onload = function()
//$(function ()
//Code goes here
//alert("got here");
//{
var sel1val = $("#sel1valtry").val()
var sel2val = $("#sel2valtry").val()

if (sel2val)
{
//alert("will not work without this alert"+sel1val);

//$("#select1").delay(2000).val(sel1val);
//$("#select1").val(sel1val);
$("#select1").prop('value',sel1val);
//  var element = document.getElementById('select1');
//    element.value = sel1val;
dochange('selection2', sel1val)
//var element = document.getElementById('select2');
//  element.value = sel2val;
alert("will not work without this alert"+sel2val);
$("#select2").val(sel2val);
}
//}
});
//}

最佳答案

似乎dochange函数正在使用一些异步API(例如,例如AJAX调用),该API在其成功回调中将值设置为sel2val变量。但是由于AJAX是异步的,因此该函数立即返回,而不必等待服务器返回响应。通过发出警报,您正在阻止下一行代码的执行,并留出足够的时间来完成AJAX调用并将值分配给sel2val变量。

修复代码的正确方法是提供此函数的回调,在其中您将执行必要的操作:

dochange('selection2', sel1val, function(result) {
    $("#select2").val(result);
});


dochange函数中,您将在AJAX调用成功事件中调用此回调。

09-18 18:23