省市选择中,点击一个按钮,往下拉框中添加地区数据。单条添加数据,能行。通过循环方式添加,失败。为什么?详细的代码如下。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>无标题页</title>
<script src="Script/jquery-1.10.2.js" type="text/javascript"></script>
<script type="text/javascript">
$(function(){
$('#btn').click(function(){
var data="[{'Id':4,'Name':'邯郸市','Pid':1},{'Id':5,'Name':'石家庄','Pid':1},{'Id':6,'Name':'邢台市','Pid':1}]";
var $pro=$('#selPro');
data2Sel(data,$pro);
});
});
function data2Sel(data,selOption){
selOption.length=0;
var res=eval(data);
//循环添加失败,res[i].Id有值,opt.val()有值,opt.html()有值。但添加失败。为什么?
for(var i=0;i<res.length;i++){
var opt=$('<option value='+res[i].Id+'>'+res[i].Name+'</option>');
selOption.append(opt);
}
//通过如下的方式添加成功。
// var $opt=$('<option value=1>河北省</option>');
// selOption.append($opt);
// $opt=$('<option value=1>河南省</option>');
// selOption.append($opt);
}
</script>
</head>
<body>
<input type="button" id="btn" />
<select id="selPro">
</select>
</body>
</html>
我觉得是 selOption.length=0的原因,或者是var opt=$('<option value='+res[i].Id+'>'+res[i].Name+'</option>');
没必要加$();
这样写有点不太好。
var data 不用加引号。
function data2Sel(data,selOption){
var opt ="";
$.each(data,function(i,n)
{
opt += "<option value="+n.Id+">"+n.Name+"</option>"
}
selOption.append(opt);
}
嗯,谢谢你的启发!问题已经解决了!将 selOption.length=0 该为 selOption.empty()就OK了!
加$()是JQuery对象,不加是DOM对象,加不加都一样!
data加“”跟不加都行,只是我有点搞不懂,加与不加有什么不一样?
谢谢你的回答!
@cxiaoluab:
首先加$()是没必要,这样会多加了消耗。
然后data加了"",你就得用eval(data),eval这个“邪恶”东西能不用尽量不用。
@|WinKi|: 嗯,知道了,谢谢指教!