【问题标题】:Programmatically selecting options in IE以编程方式在 IE 中选择选项
【发布时间】: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的值是多少?
  • 这是一个布尔值,所以truefalse
  • 我建议提醒每个 option.selected 在 IE 中查看它得到了什么。我也将 if 语句替换为 option.selected === true
  • @mplungjan 他正在使用原型库,而不是 jQuery。
  • 当我做一些测试时,我在 Internet Explorer 8 中选择了我想要的选项,你能提供更详细的信息吗?你用什么原型?您的数组的示例?

标签: javascript internet-explorer prototypejs


【解决方案1】:

好的,我找到了解决方案,它涉及将“插入”替换为手动生成选项节点,有点像以下:

var newOption = document.createElement('option');
newOption.setAttribute('value',option.value);
newOption.innerHTML = option.text;
if(option.selected) {
    newOption.selected = true;
}

$('selectField').appendChild(newOption);

我猜问题在于原型 insert() 的工作原理,尽管我很高兴问题得到了解决。

【讨论】:

    【解决方案2】:
    var options = new Array();
    
    options.push({id:1,value:'one',text:'text1',selected:false});
    options.push({id:2,value:'two',text:'text2',selected:true});
    options.push({id:3,value:'three',text:'text3',selected:false});
    options.push({id:4,value:'four',text:'text4',selected:false});
    
    var toBeSelected;
    options.each(function(option) {
        var optionString = "<option id='" + option.id + "' value='" + option.value + "'>" + option.text + "</option>";
        $('selectField').insert(optionString);
        if (option.selected == true)
        {
            toBeSelected = option.id+""; // +"" because have to be a string
        }
    });
    
    $(toBeSelected).selected = true;
    

    【讨论】:

    • 我已经尝试过了,仍然得到相同的结果。我在 if 语句中发出了警告,并且确定 toBeSelected 设置正确。
    猜你喜欢
    • 1970-01-01
    • 2010-12-07
    • 2015-10-31
    • 1970-01-01
    • 2017-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多