那是因为你没有采用异步操作
因为,远程的xml并没有全部下载到本地.
但是加上alert后,相当于在客户端等待了几秒中,这个过程中数据已经传输完毕.
所以就是可以的.
function importXml(xmlFile) {
if (document.implementation && document.implementation.createDocument) { //For Mozilla FireFox
xmlDoc = document.implementation.createDocument("", "", null);
xmlDoc.onload = createSel;
}
else { //For Internet Explorer
xmlDoc = new ActiveXObject("Msxml2.DOMDocument");
xmlDoc .async = false;
xmlDoc.load(xmlFile);
xmlDoc.onreadystatechange = function () {
if (xmlDoc.readyState == 4)
createSel();
}
}}
因为,远程的xml并没有全部下载到本地.
但是加上alert后,相当于在客户端等待了几秒中,这个过程中数据已经传输完毕.
所以就是可以的.
function importXml(xmlFile) {
if (document.implementation && document.implementation.createDocument) { //For Mozilla FireFox
xmlDoc = document.implementation.createDocument("", "", null);
xmlDoc.onload = createSel;
}
else { //For Internet Explorer
xmlDoc = new ActiveXObject("Msxml2.DOMDocument");
xmlDoc .async = false;
xmlDoc.load(xmlFile);
xmlDoc.onreadystatechange = function () {
if (xmlDoc.readyState == 4)
createSel();
}
}}
解决方案 »
- Array.prototype.push.call是什么意思啊
- 问1个JQUERY选择器的问题
- html和xml的Document对象是不是被浏览器实现为同一个对象了?
- 为什么我appendChild进的值没有显示在页面上
- 怎么通过函数实现实现把一个页面代码中已知的一段代码删掉?
- uploadify插件,如何移除初始化生成的object标签
- 如何在ie中实现打印功能
- 怎样使一个html没有toolbar和menubar?急!
- window.open('openwin.htm','newwin','fullscreen=yes,scrollbars=no');为什么滚动条还有?
- $.getJson跨域请求成功却没返回值
- 请教Session过期后页面跳转的问题
- iframe嵌套的html文本问题
运行基础:IE6以上。
现在你的这个问题可以这样解决,把选中第四项的操作加一个0.1秒延时,就没有这个问题了.field.options[3].selected = true;
改为:
setTimeout("document.getElementById('test').options[3].selected = true",100);
测试如下,将创建对象的方法由XML数据改为数组数据(不使用XML),在浏览器中单独运行下面函数,问题依旧,说明和XML无关,即说明此处和async属性无关.
function createSel() {
arr=new Array("0","1","2","3","4","5","6","7","8","9");
var field = document.getElementById("test"); for (var i=0; i<arr.length; i++) {
var op = document.createElement("option");
op.value = arr[i];
op.innerHTML = arr[i];
field.appendChild(op);
}
field.options[3].selected = true; //问题语句?!
}
感谢各位的支持!xmlDoc .async = false;这个我原先一直不知道具体是干什么用的,原来是异步提交。看来得看看ajax了。
对于需要载入xml文件少的情况下,该方法奏效;对于多的,好像还是载不完全,但依然还是要谢谢。继续解决中
async在默认情况下是true的,也就是异步状态。
异步情况下可以避免超时和长时间的等待带来的麻烦。而以下代码实际上已经指定了数据在读取完整后再执行createSel()函数。
xmlDoc.onreadystatechange = function () {
if (xmlDoc.readyState == 4)
createSel();
}
}再说说ljhyp_cn(香草山牧民)的代码,其实只是将异步改为同步,这样的情况下,下面的代码是多余的,其最终结果和楼主代码是一致的。
xmlDoc.onreadystatechange = function () {//多余的
if (xmlDoc.readyState == 4)
createSel();
}
}
最后说说我的测试结果,我测试楼主的代码后并没发现楼主所说的问题,可以正常运行。(用这种方式建立HTML,很麻烦的做法,真有这必要吗)
http://bbs.51js.com/viewthread.php?tid=48348&fpage=1&highlight=
八楼回复
只是你的建立HTML的方式就有可能会遇到这种问题,之前也看别人问过类似问题。还有,我那个范例方便比你上面的代码方便很多啊。用XML建立菜单由JS来做,其实比XSL麻烦很多。而且还有你遇到的问题存在。