我有一个多选项,其中包含许多来自访问者的来源。我还在所有选项的顶部包含一个选项(值为“all”)。
当有人点击该选项时,将选择所有选项。那部分很容易。我已经包含了侦听点击事件的多选和jquery。
<select name="sourceid[]" id="sourceid" style="width:230px;" multiple="multiple">
<option value="all">-- Select All Sources --</option>
<option value="1">Internet</option>
<option value="2">Radio</option>
<option value="3">Phone</option>
<option value="4">Other</option>
</select>
$("#sourceid").click(function(){
if($(this).val()=='all'){ $("#sourceid option").attr("selected","selected"); }
});
到目前为止,效果很好! jquery也会自然地选择顶部选项。
有没有办法让jquery排除选择那个选项?
答案 0 :(得分:9)
使用此选择器
$("option[value!=all]")
属性值不是all
,example on jsFiddle
Attribute not equal selector jQuery API
答案 1 :(得分:3)
使用jQuery的not()选择器
尝试此操作$("#sourceid").click(function(){
if($(this).val()=='all'){
$("#sourceid option").not(this)
.attr("selected","selected");
}
});
答案 2 :(得分:2)
怎么样
$("#sourceid option").not(':first').attr("selected","selected");
答案 3 :(得分:0)
如果我理解你正在尝试做什么,我会使用复选框列表,然后选择所有选中所有框而不是使用下拉列表...
答案 4 :(得分:0)
避免问题;只需将disabled
添加到顶部选项即可。无论如何,你不希望他们能够提交该选项。
<select name="sourceid[]" id="sourceid" style="width:230px;" multiple="multiple">
<option value="all" disabled>-- Select All Sources --</option>
<option value="1">Internet</option>
<option value="2">Radio</option>
<option value="3">Phone</option>
<option value="4">Other</option>
</select>
答案 5 :(得分:0)
你可以像这样使用not选择器:
$("#sourceid :not(option[value='all'])").attr("selected", "selected");
答案 6 :(得分:0)
$("#sourceid option[value=all]").click(function(){
$(this).siblings().attr("selected","selected");
});
也许更好:
$("#sourceid option[value=all]").click(function(){
if($(this).siblings("[selected=selected]").size() == $(this).siblings().size()) {
$(this).siblings().removeAttr("selected");
} else {
$(this).siblings().attr("selected","selected");
}
});