首页 新闻 会员 周边

关于JS操作select的问题

0
悬赏园豆:30 [已关闭问题]

在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代码如下:

JSCode
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()去测试,发现值是获取到最新的值了;

但是问题就是我的下拉框没有选中我想要的那一项.

问题补充: 我在body外又做了一个alert(document.getElementById("SelProvince").options.length); 结果弹出是1, 这就让我很郁闷了,明明游览器里面有三个option,但是弹出的对话框只有1,这是什么原因,
双调的主页 双调 | 初学一级 | 园豆:7
提问于:2010-02-05 20:04
< >
分享
其他回答(1)
0

$.get(url,function(data){
        $(
"#SelProvince").append(data);
    });

这请求是异步扫行的。在执行Get()方法后,会向服务器发送请求,并继续执行下面的代码

if(CheckAddOrUpdate() != 0)

你“if(CheckAddOrUpdate() != 0)”这个IF语句块是想在执行了$("#SelProvince").append(data);之后再执行。可浏览器是先执行的 IF语句再执行的$("#SelProvince").append(data);

可以将IF语句放到GET方法里面。

qpgame01 | 园豆:210 (菜鸟二级) | 2010-02-06 10:29
你的问题补允,应该也是这个原因引起的。
支持(0) 反对(0) qpgame01 | 园豆:210 (菜鸟二级) | 2010-02-06 10:30
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;
            }
        }

这样会不会更符合JQuery的Write less Do more 的精神。

----------

$('#SelProvince').children("option[value='"+$("#HidProvince").val()+"']").attr('selected','selected');

qijunhuang | 园豆:220 (菜鸟二级) | 2010-02-08 18:28
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册