在asp.net中,我用Jquery.append()去向select里面去动态添加一段我想要的下拉框列表,然而这一段列表是从后台读取的, 具体代码如下:
protected void Page_Load(object sender, EventArgs e)
{
if(!ispostback)
{
response.context="text/plain";
response.write(ProvinceBind());
}
}
private string ProvinceBind()
{
string filePath = Server.MapPath("../Config/ProvinceCD.config");
DataTable dataTable = WebCommon.Second.ReadProvinceToDataTable(filePath);//将XML文件读成DataTable
System.Text.StringBuilder sb = new System.Text.StringBuilder();
for (int i = 0; i < dataTable.Rows.Count; i++)
{
sb.AppendFormat("<option value=\"{0}\">{1}</option>", dataTable.Rows[i]["ID"].ToString(), dataTable.Rows[i]["City"].ToString());
}
return sb.ToString();
}
JS代码如下:
function BodyOnLoad()
{
var url = "../Ajax/AjaxReadDropDL.aspx";
$.get(url,function(data){
$("#SelProvince").append(data);
});
if(CheckAddOrUpdate() != 0)
{
var obj = document.getElementById("SelProvince");
for(var i=0;i<obj.options.length;i++)
{
if(obj.options[i].value == $("#HidProvince").val())
{
obj.selectedIndex = i;
}
}
}
}
但是我的下拉框列表并没有变成我需要的那一项,
于是我想可能是JS的问题,我就把这一段JS拿去在EditPlus里面去单独测试,发现这一段代码是可行的,
我又想难道是运行机制的问题,没有获取到HidProvince的最新值?
因为我默认的是0,怕是值没有改变,于是我又用alert()去测试,发现值是获取到最新的值了;
但是问题就是我的下拉框没有选中我想要的那一项.
$.get(url,function(data){
$("#SelProvince").append(data);
});
这请求是异步扫行的。在执行Get()方法后,会向服务器发送请求,并继续执行下面的代码
if(CheckAddOrUpdate() != 0)
你“if(CheckAddOrUpdate() != 0)”这个IF语句块是想在执行了$("#SelProvince").append(data);之后再执行。可浏览器是先执行的 IF语句再执行的$("#SelProvince").append(data);
可以将IF语句放到GET方法里面。
var obj = document.getElementById("SelProvince");
for(var i=0;i<obj.options.length;i++)
{
if(obj.options[i].value == $("#HidProvince").val())
{
obj.selectedIndex = i;
}
}
这样会不会更符合JQuery的Write less Do more 的精神。
----------
$('#SelProvince').children("option[value='"+$("#HidProvince").val()+"']").attr('selected','selected');