从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上运行; 你可能想尝试在其他人。