2011-05-02 70 views
6

我有一个多选,包含访问者来自哪里的许多来源。我还在所有选项的顶部包含一个选项(值为“全部”)。jQuery的选择输入选项,除了一个

当有人点击该选项时,将选择所有选项。那部分很简单。我已经包含了监听点击事件的多选和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

您更好地使用'茶nge'而不是'click'。这个病也捕捉用键盘选择。 – 2011-05-02 18:54:24

回答

0

如果我理解你正在试图做正确的东西,我会请使用复选框列表,然后选择所有选中的所有框,而不是使用下拉列表...

+0

是的,这是一个选项。这只是我问的一个偏好。 – coffeemonitor 2011-05-02 18:56:18

3

试试这个使用jQuery的not()选择

$("#sourceid").click(function(){ 

    if($(this).val()=='all'){ 
      $("#sourceid option").not(this) 
        .attr("selected","selected"); 
    } 

}); 
+1

+1好回答 – pixelbobby 2011-05-02 19:01:00

+0

@pixelhobby,thnx – Neal 2011-05-02 19:04:51

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

真的!不幸的是,它确实阻止jquery识别点击事件。 – coffeemonitor 2011-05-02 18:55:38

+0

@user - 啊,好点。 – eykanal 2011-05-02 18:56:59

0

可以使用不slector这样的:

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

如何

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