标题: 急!请教高手:利用xml的selected问题!
issacdd
爬虫
Rank: 2


UID 15671
精华 0
积分 151
帖子 65
威望 67
阅读权限 20
注册 2004-8-17
来自 浙江杭州
状态 离线
 
发表于 2005-11-7 16:50  资料  个人空间  主页 短消息  加为好友  添加 issacdd 为MSN好友 通过MSN和 issacdd 交谈 QQ
急!请教高手:利用xml的selected问题!

写了个利用xml文件动态生成select选项的脚本,想其中某项选中。在IE5和Mozilla测试没有问题,在IE6下测试报错:“无法设置selected属性。未指明的错误。”
但如果前面加入alert(),又能正常运行,真是郁闷死了。

代码如下,请修改xml文件路径。
xml文件如下或者参见xml文件地址

   提示:您可以先修改部分代码再运行

哪位大侠能帮我解释/解决一下,谢谢了!

xml内容:
<?xml version="1.0" encoding="utf-8"?>
<Temp>
        <add key="0" value="0"></add>
        <add key="1" value="1"></add>
        <add key="2" value="2"></add>
        <add key="3" value="3"></add>
        <add key="4" value="4"></add>
        <add key="5" value="5"></add>
        <add key="6" value="6"></add>
        <add key="7" value="7"></add>
        <add key="8" value="8"></add>
        <add key="9" value="9"></add>
</Temp>

顶部
Chrothra
爬虫
Rank: 2



UID 7593
精华 0
积分 67
帖子 42
威望 42
阅读权限 20
注册 2003-12-28
状态 离线
 
发表于 2005-11-7 17:12  资料  个人空间  短消息  加为好友 
var idx = 3;
idx = (is_ie) ? idx*2+1:idx;
field.childNodes[idx].selected = true





Protopage.com/CodeLive
顶部
issacdd
爬虫
Rank: 2


UID 15671
精华 0
积分 151
帖子 65
威望 67
阅读权限 20
注册 2004-8-17
来自 浙江杭州
状态 离线
 
发表于 2005-11-7 17:31  资料  个人空间  主页 短消息  加为好友  添加 issacdd 为MSN好友 通过MSN和 issacdd 交谈 QQ
问题出在“无法设置selected属性。”不是DOM遍历树问题,你测试一下就知道了,仍然会报错的。

顶部
nameless
大恐龙
Rank: 4



UID 39319
精华 0
积分 752
帖子 344
威望 334
阅读权限 50
注册 2005-10-14
状态 离线
 
发表于 2005-11-8 08:15  资料  个人空间  短消息  加为好友 
既然已经用createElement了,为什么不用setAttribute呢

   提示:您可以先修改部分代码再运行


顶部
issacdd
爬虫
Rank: 2


UID 15671
精华 0
积分 151
帖子 65
威望 67
阅读权限 20
注册 2004-8-17
来自 浙江杭州
状态 离线
 
发表于 2005-11-8 08:46  资料  个人空间  主页 短消息  加为好友  添加 issacdd 为MSN好友 通过MSN和 issacdd 交谈 QQ
谢谢你的支持。我一大早也想到了这种方法。
这样做虽然IE6下解决了,不过Moz下似乎还不行(这倒是其次,毕竟利用判断可以解决浏览器的兼容问题),而且需要加入field.options[0].setAttribute("selected",false);field.options.selectedIndex=i;两句。
问题最大的是这个脚本我本用在二连动菜单上的,却无法影响到后一联菜单,真是郁闷死了。

而且为什么在问题语句前加个alert()就可以了呢?百思不得其解,还请高手赐教。

顶部
nameless
大恐龙
Rank: 4



UID 39319
精华 0
积分 752
帖子 344
威望 334
阅读权限 50
注册 2005-10-14
状态 离线
 
发表于 2005-11-8 09:03  资料  个人空间  短消息  加为好友 
我们换种方法想,alert的时候脚本做了什么?
暂停了一会,然后,模仿一下

   提示:您可以先修改部分代码再运行

可能那段时间,新建的对象还没准备好,所以会出错
经过测试,时间可以调到1ms,不会出错
setTimeout("Pause()",1);

[ 本帖由 nameless 最后编辑于 2005-11-8 09:05 ]

顶部
issacdd
爬虫
Rank: 2


UID 15671
精华 0
积分 151
帖子 65
威望 67
阅读权限 20
注册 2004-8-17
来自 浙江杭州
状态 离线
 
发表于 2005-11-8 13:21  资料  个人空间  主页 短消息  加为好友  添加 issacdd 为MSN好友 通过MSN和 issacdd 交谈 QQ
再次感谢nameless!
用延时的方法是可以解决这个问题,但是对于多级联动,或者一个页面载入内容过多,该问题还是无法得到很好的解决,而且代码重用率不高。
另外实在想不通:IE5都能很好支持的东西,怎么放到IE6就挂了。
怪自己太菜了,^_^ |||

谁能够提供一个兼容性良好,利用xml载入select选项数据,并且可使用默认值的脚本呢?这里小弟先谢过了。

顶部
issacdd
爬虫
Rank: 2


UID 15671
精华 0
积分 151
帖子 65
威望 67
阅读权限 20
注册 2004-8-17
来自 浙江杭州
状态 离线
 
发表于 2005-11-9 19:48  资料  个人空间  主页 短消息  加为好友  添加 issacdd 为MSN好友 通过MSN和 issacdd 交谈 QQ
我在几个大的技术论坛上都发过此帖,现在总结如下:
1。我的目的并不在于生成某一个下拉框项,主要是用于需要动态载入(利用xml存放数据)的级连菜单中。而实际应用中,经常会碰到需要有默认项的情况,比如编辑一个用户原先提交的行业类别或者所在地区。
2。目前看来,似乎是由于xml没有下载完成所造成的错误,特别是在页面需要载入数个xml文件的时候。尽管我已经使用了xmlDoc.readyState == 4来判断。不过我一直很不解的是,IE5和FF浏览器却能正常处理,而最常用的IE6却挂掉了。
3。目前可行的办法,就是加上setTimeout延时处理,不过对于连动菜单过多时,处理会相当麻烦。或者尽可能减少遍历xml树来优化代码。而且使用field.options[i].setAttribute("selected",true);代替field.options[i].selected=true;会更保险些。

还是感谢大家对我的支持,我也得好好学习一下js和xml技术。当然,谁能指点一二,小弟不胜感激。。。

[ 本帖由 issacdd 最后编辑于 2005-11-9 21:52 ]

顶部
 



当前时区 GMT+8, 现在时间是 2010-7-31 04:40
苏ICP备05080427号

Powered by Discuz! 5.5.0  © 2001-2007 51JS.COM
Processed in 0.256724 second(s), 8 queries , Gzip enabled

清除 Cookies - 联系我们 - 无忧脚本 - Archiver