使用JavaScript调用另外一个页面,返回XML字符串,然后解析动态往Select控件中添加选项,并设置Select控件值,以此来实现无刷新的多级关联下拉列表。最初JS代码如下:
function getNewList(pList,cListID,selectedValue)
{
var drp2 = document.getElementById(cListID);
for(var i=drp2.options.length-1;i>=0;i--)
{
drp2.options.remove(i);
}
var oHttpReq = new ActiveXObject("MSXML2.XMLHTTP"); //发送请求
var oDoc = new ActiveXObject("MSXML2.DOMDocument"); //响应结果
var pID = pList.value;
oHttpReq.open("post","inc/getChildList.aspx?p="+pID, false);
oHttpReq.send("");
var result = oHttpReq.responseText;
oDoc.loadXML(result);
var items = oDoc.selectNodes("//NewDataSet/test");
var newOption;
newOption = document.createElement("OPTION");
newOption.text = "请选择";
newOption.value = "-1";
drp2.options.add(newOption);
for(var i = 0;i<items.length;i++)
{
var name = oDoc.selectSingleNode("//NewDataSet/test[" + i + "]/name").text;
var id = oDoc.selectSingleNode("//NewDataSet/test[" + i + "]/id").text;
newOption = document.createElement("OPTION");
newOption.text = name;
newOption.value = id;
if(id == selectedValue)
{
newOption.selected = true;
}
drp2.options.add(newOption);
}
}
检查代码没有问题,但是奇怪的现象出现了,如果我在函数开始的地方或者其他地方加上alert(selectedValue)来弹出一个对话框(弹出内容应该是随便写就可以的),然后一切运行正常,如果去掉,取值、为Select添加选项正常,newOption.selected = true;这一行却不再生效,非常奇怪的问题,没有解决。
后将代码改成如下格式,才可以正常使用:
function getNewList(pList,cListID,selectedValue)
{
var drp2 = document.getElementById(cListID);
for(var i=drp2.options.length-1;i>=0;i--)
{
drp2.options.remove(i);
}
var oHttpReq = new ActiveXObject("MSXML2.XMLHTTP"); //发送请求
var oDoc = new ActiveXObject("MSXML2.DOMDocument"); //响应结果
var pID = pList.value;
oHttpReq.open("post","inc/getChildList.aspx?p="+pID, false);
oHttpReq.send("");
var result = oHttpReq.responseText;
oDoc.loadXML(result);
var items = oDoc.selectNodes("//NewDataSet/test");
var newOption;
var exist = false;
newOption = document.createElement("OPTION");
newOption.text = "请选择";
newOption.value = "-1";
drp2.options.add(newOption);
for(var i = 0;i<items.length;i++)
{
var name = oDoc.selectSingleNode("//NewDataSet/test[" + i + "]/name").text;
var id = oDoc.selectSingleNode("//NewDataSet/test[" + i + "]/id").text;
newOption = document.createElement("OPTION");
newOption.text = name;
newOption.value = id;
if(id == selectedValue)
{
exist = true;
}
drp2.options.add(newOption);
}
if(exist == true) drp2.value = selectedValue
}
苦思不解,不知第一个函数为何加上alert可以正常运行,去掉就不可以,如有高手遇到并知其原因所在,还望不吝指教,谢谢啦!