问题 我有以下代码不会更新拖动选择框“select1”和“select2”,除非我在代码前面有一个警告。
背景资料 - 我将两个变量发布到此页面,“sel1val”和“sel2val”,我将它们分配给id为“sel1valtry”和“sel2valtry”的隐藏输入框。我将这些输入框的值分配给函数中的变量,并将它们命名为“sel1val”和“sel2val”。如果需要,我可以发布更多代码,但这就是我所说的“非法代码”...哈哈!因为我是一个新手,它是由许多不同风格的代码组合而成。
目标 - 我想要实现的是根据“sel1val”和“sel2val”的值设置两个选择框。只有在代码之前有警报时才能获得正确的功能。
我尝试的方法 - 我留下了一些注释掉的代码,以说明我的尝试。我经历过很多论坛,这就是我从中得到这些想法的地方。我怀疑警报“重新加载”页面的javascript部分,但我没有真正的基础。我已经尝试过“文档就绪”,“窗口加载”的变化,甚至尝试延迟减速,以防它是一个时间问题。我尝试过的每种方法都产生了相同的结果,因此它只能用于警报。
我在基于网络的项目上取得了很大的成功,如果没有像这样的论坛中宝贵的资源,这是不可能实现的。我要感谢任何曾经提供过输入/解决方案的人,因为没有这个,我将永远无法取得进展。
$(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);
}
//}
});
//}
答案 0 :(得分:4)
似乎dochange
函数正在使用一些异步API(例如AJAX调用),它在成功回调中为sel2val
变量设置值。但由于AJAX是异步的,因此该函数立即返回,而不是等待服务器返回响应。通过发出警报,您将阻止执行下一行代码并留出足够的时间来完成AJAX调用并为sel2val
变量赋值。
修复代码的正确方法是为此函数提供回调,您将执行必要的操作:
dochange('selection2', sel1val, function(result) {
$("#select2").val(result);
});
在你的dochange
函数中,你将在AJAX调用的成功事件中调用此回调。