2011-05-02 48 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"); 
} 
});