Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jquery选择输入选项,除了一个_Jquery_Jquery Selectors - Fatal编程技术网

jquery选择输入选项,除了一个

jquery选择输入选项,除了一个,jquery,jquery-selectors,Jquery,Jquery Selectors,我有一个multi-select,它保存了许多访问者的来源。我还在所有选项的顶部包含一个值为all的选项 当有人单击该选项时,将选择所有选项。这部分很简单。我已经包括了侦听单击事件的multi-select和jquery <select name="sourceid[]" id="sourceid" style="width:230px;" multiple="multiple"> <option value="all">-- Select All Sources -

我有一个multi-select,它保存了许多访问者的来源。我还在所有选项的顶部包含一个值为all的选项

当有人单击该选项时,将选择所有选项。这部分很简单。我已经包括了侦听单击事件的multi-select和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自然也会选择top选项

有没有办法告诉jquery排除选择那个选项

使用此选择器

$("option[value!=all]")
属性值不是全部的所有选项


jQuery API

如果我正确理解了您试图执行的操作,我将使用复选框列表,然后使用全选来检查所有框,而不是使用下拉列表…

使用jQuery的选择器尝试此操作


避免问题;只需将禁用添加到顶部选项。无论如何,你不希望他们能够提交该选项

<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>

可以像这样使用not slector:

 $("#sourceid :not(option[value='all'])").attr("selected", "selected");
怎么样

$("#sourceid option").not(':first').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");
}
});

您最好使用更改而不是单击。这也是我用键盘做的。真的!不幸的是,它确实阻止了jquery识别单击事件。是的,这是一个选项。这只是我想问的一个偏好。
$("#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");
}
});