问题
我所拥有的是以下代码不会更新两个选择框“ 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调用成功事件中调用此回调。