0

我遇到的问题 是以下代码不会更新拖曳选择框“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);
}
//}
});
//}
4

1 回答 1

4

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

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

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

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

于 2013-05-17T06:25:45.160 回答