【发布时间】:2011-10-07 14:28:55
【问题描述】:
我有一个小脚本,它生成一个选择字段并在生成时选择适当的选项。有点像这样:
options.each(function (option) {
var optionString = "<option id='" + option.id + "' value='" + option.value + "'>" + option.text + "</option>";
$('selectField').insert(optionString);
if(option.selected) {
toBeSelected = option.id;
}
});
$(toBeSelected).setAttribute('selected','selected');
现在上面的脚本在 Chrome 和 Firefox 中运行良好,但在 IE 中它总是会选择列表中的最后一个元素。所以说我正在生成一个选项列表['a','b','c','d'],总是会选择“d”。
有人知道是什么原因造成的吗?
更新:
好的,我找到了一个解决方案,它涉及用手动生成选项节点替换“插入”,有点像下面:
var newOption = document.createElement('option');
newOption.setAttribute('value',option.value);
newOption.innerHTML = option.text;
if(option.selected) {
newOption.selected = true;
}
$('selectField').appendChild(newOption);
我猜问题在于原型 insert() 的工作原理,尽管我很高兴问题得到了解决。
在 8 小时内回答我自己的问题后,我将重新格式化为答案。
感谢大家对此的投入
【问题讨论】:
-
option.selected的值是多少?
-
这是一个布尔值,所以
true或false -
我建议提醒每个 option.selected 在 IE 中查看它得到了什么。我也将 if 语句替换为 option.selected === true
-
@mplungjan 他正在使用原型库,而不是 jQuery。
-
当我做一些测试时,我在 Internet Explorer 8 中选择了我想要的选项,你能提供更详细的信息吗?你用什么原型?您的数组的示例?
标签: javascript internet-explorer prototypejs