从dynamic创build的选项中设置选项“select”属性

我有一个dynamic创build的select使用JavaScript函数选项。 select对象是

<select name="country" id="country"> </select> 

当执行js函数时,“国家”对象是

 <select name="country" id="country"> <option value="AF">Afghanistan</option> <option value="AL">Albania</option> ... <option value="ID">Indonesia</option> ... <option value="ZW">Zimbabwe</option> </select> 

并显示“印度尼西亚”作为默认select的选项。 注意:该选项中没有selected="selected"属性。

那么我需要将selected="selected"属性设置为“Indonesia”,我使用它

 var country = document.getElementById("country"); country.options[country.options.selectedIndex].setAttribute("selected", "selected"); 

使用萤火虫,我可以看到“印度尼西亚”选项是这样的

 <option value="ID" selected="selected">Indonesia</option> 

但在IE中失败(在IE 8中testing)。

然后我尝试使用jQuery

 $( function() { $("#country option:selected").attr("selected", "selected"); }); 

它在FFX和IE中都失败了。

我需要“印度尼西亚”选项selected="selected"属性,所以当我点击重置button,它会再次select“印度尼西亚”。

改变jsfunctiondynamic地创build“国家”选项不是一个选项。 该解决scheme必须同时在FFX和IE中工作。

谢谢

好问题。 您将需要修改HTML本身,而不是依赖DOM属性。

 var opt = $("option[val=ID]"), html = $("<div>").append(opt.clone()).html(); html = html.replace(/\>/, ' selected="selected">'); opt.replaceWith(html); 

代码抓取印度尼西亚的选项元素,克隆它,并把它放到一个新的div(不在文档中)来检索完整的HTMLstring: <option value="ID">Indonesia</option>

然后在用新的replace原始选项之前,进行stringreplace以将selected="selected"属性selected="selected" 为string

我在IE7上testing了它。 看到它与复位button在这里正常工作: http : //jsfiddle.net/XmW49/

你正在反思:

 var country = document.getElementById("country"); country.options[country.options.selectedIndex].selected = true; 

而不是修改HTML本身,你应该设置你想要的select元素的值:

 $(function() { $("#country").val("Indonesia"); }); 

你想要做的是设置select框的selectedIndex属性。

 country.options.selectedIndex = index_of_indonesia; 

在IE中,更改“selected”属性通常不起作用。 如果你真的想要描述的行为,我build议你写一个自定义的JavaScript重置函数,将表单中的所有其他值重置为默认值。

 // get the OPTION we want selected var $option = $('#SelectList').children('option[value="'+ id +'"]'); // and now set the option we want selected $option.attr('selected', true);​​ 

这在FF,IE9中工作

 var x = document.getElementById("country").children[2]; x.setAttribute("selected", "selected"); 

这么多错误的答案!

要指定表单字段在重置表单时应该还原的值,请使用以下属性:

  • checkbox或单选button: defaultChecked
  • 任何其他<input>控件: defaultValue
  • 下拉列表中的选项: defaultSelected

因此,要将当前选定的选项指定为默认值:

 var country = document.getElementById("country"); country.options[country.selectedIndex].defaultSelected = true; 

为每个选项设置defaultSelected值可能是一个好主意,以防之前已经设置的值:

 var country = document.getElementById("country"); for (var i = 0; i < country.options.length; i++) { country.options[i].defaultSelected = i == country.selectedIndex; } 

现在,当窗体重置时,选定的选项将是您指定的选项。

 // Get <select> object var sel = $('country'); // Loop through and look for value match, then break for(i=0;i<sel.length;i++) { if(sel.value=="ID") { break; } } // Select index sel.options.selectedIndex = i; 

贝吉图

您可以search所有的选项值,直到find正确的值。

 var defaultVal = "Country"; $("#select").find("option").each(function () { if ($(this).val() == defaultVal) { $(this).prop("selected", "selected"); } }); 

这应该工作。

 $("#country [value='ID']").attr("selected","selected"); 

如果你有函数调用绑定到元素只是按照类似的东西

 $("#country").change(); 

意识到这是一个古老的问题,但是对于新版本的JQuery,现在可以执行以下操作:

 $("option[val=ID]").prop("selected",true); 

这与Box9在一行中select的答案完成相同的事情。

 select = document.getElementById('selectId'); var opt = document.createElement('option'); opt.value = 'value'; opt.innerHTML = 'name'; opt.selected = true; select.appendChild(opt); 

要在运行时设置input选项,请尝试设置“检查”值。 (即使它不是checkbox)

 elem.checked=true; 

哪里elem是select的选项的参考。

所以对于上面的问题:

 var country = document.getElementById("country"); country.options[country.options.selectedIndex].checked=true; 

这适用于我,即使选项不包裹在一个。

如果所有的标签共享相同的名称,他们应该取消选中新的检查。

我正在尝试这样的使用$(...).val()函数,但该函数不存在。 事实certificate,您可以像<input>一样手动设置值:

 // Set value to Indonesia ("ID"): $('#country').value = 'ID' 

…它会自动更新在select。 至less在Firefox上运行; 你可能想尝试在其他人。