2014-04-17 64 views
0

我有一個多選列表,其中值按類別獲取父元素,其中多個子元素有選擇輸入

<select class="multiselect" multiple="multiple"> 
     <optgroup label="IsStudent"> 
      <option value="y">Yes</option> 
      <option value="n">No</option> 
     </optgroup> 
     <optgroup label="IsOffer"> 
      <option value="y">Yes</option> 
      <option value="n">No</option> 
     </optgroup> 
    </select> 

我使用http://davidstutz.github.io/bootstrap-multiselect/組合在一起,相同的值。我試圖找到我選擇的選項元素的父項。我這樣做的:

onChange: function (element, checked) { 
      if (checked == true) { 
       alert($(element).filter(":selected").parent("optgroup").attr("label"));    
      } 
     } 

當我的任何選項被選中,它會提醒「IsStudent」即使我選擇在「IsOffer」的選項。如果我將值更改爲唯一,則警報會提醒正確的父項。

是否可以檢測所選元素,而不管我的值是否重複。我希望它在父optgroup不同時將它看作是唯一的。 我試圖

alert($(element).filter(":selected:last").parent("optgroup").attr("label")); 
+0

爲何下來投票?這是一個合法的問題 – mjroodt

+0

不要明白。 * le vote up * – Anticom

回答

1

嘗試

$("select").find("option:selected").last().closest("optgroup").attr("label") 

this fiddle測試。

如果你想接受這個解決方案,考慮接受sudhar的解決方案,因爲他是第一個psot的主要問題(他應該添加last()方法調用,當然)。

編輯: op實際上想要報告最近選擇的項目。這個人做的伎倆:在this fiddle

+0

感謝您的建議,但它不起作用,如果我選擇多個選項 – mjroodt

+0

@ mjroodt確定它!嘗試小提琴 - 它顯示每次更改選擇後最後選定項目的optgroup。我還編輯了小提琴(你確定你用我的而不是原來的?) – collapsar

+0

在小提琴的例子中,我選擇了isOffer中的一個選項。警報正確顯示。我按住Ctrl鍵並在isStudent中選擇一個選項,並且警報以isOffer形式出現。 – mjroodt

0
$("select").find("option:selected").closest("optgroup").attr("label") 

Fiddle

+0

這也會返回第一個只有選定元素的optgroup! – collapsar

+0

@collapsar,它確實 –

+0

不適用於選擇多個項目 – mjroodt

0

使用is method

$("select").click(function(eve) { 
    alert($(eve.target).closest("optgroup").attr("label")); 
}); 

測試就知道選擇的選項是最後與否:

alert($(element).filter(":selected").is(:last).parent("optgroup").attr("label")); 
相關問題