2014-04-17 68 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")); 
相关问题