无法在javascript函数中填充下拉列表

时间:2014-05-29 10:34:15

标签: javascript jquery asp.net ajax

我使用

从代码隐藏调用javascript函数
ScriptManager.RegisterStartupScript(this, this.GetType(), "pop", "<script>alert('File Size Can Not Exceed 400Kb Limit.');window.onload = function () {RetainValues(); }</script>", false);

这里RetainValues();是一个javascript函数,它应该在表单上设置输入和选择控件的值。

我有另一个名为GetDropDownData()的函数,它负责从数据库中获取下拉数据(ajax调用)并填充下拉列表。

RetainValues(){
GetDropDownData();
   $(field).find("option").length; // this is always zero when i debug
//i would like to set selected option based on text here but since it seems to be zero here ,i cant.
}

function GetDropDownData(){
// ajax call to fecth data and fill dropdown
}

一旦RetainValues()函数完成,我就会填充下拉列表。由于它没有在RetainValues()的范围内填充,我无法设置其值。

2 个答案:

答案 0 :(得分:3)

首先,由于您正在调用包含Ajax调用的GetDropDownData,因此它是异步的。这意味着您无法判断ajax调用何时完成。潜在的1秒或1分钟!但是,javascript会立即尝试查找在ajax调用有机会完成之前返回的选项的长度。

一旦您的ajax呼叫完成,您只能确定选项是否确实已填充。这可以在ajax调用的success函数中完成,或者你可以将一个回调函数传递给要被调用的success函数,然后在ajax调用返回的基础上做你需要做的任何事情。

答案 1 :(得分:0)

RetainValues(){
GetDropDownData(); 
}
   function GetDropDownData(){
   $.ajax({ url: "URL to call", 
       success: function(data){
            //fill the dropdown
             $(field).find("option").length;
            // U will get the exact length. Now u can do whatever u want using the Length.
        }
    });
}