Jquery获得optgroup标签及其子

时间:2013-03-25 03:22:07

标签: jquery optgroup

如何根据所选的box_B选项获取box_A optgroup的标签名称?

我使用以下函数尝试提醒box_A父标签,但无法获取,如果我更改为var label = $(e).attr('value');,则选项值显示。

function showLabel(e){ 
    if($(e).attr('checked')=='checked'){
         var label = $(e).parent().attr('label');
         alert(label);
    }
}

选择框:

<select id="box_A" multiple="multiple">
    <optgroup label="Asia: Japan">
        <option value="1 - Toyota">1 - Toyota</option>
        <option value="2 - Honda">2 - Honda</option>
    </optgroup>
    <optgroup label="Europe: German">
        <option value="3 - Mercedes">3 - Mercedes</option>
    </optgroup>
</select>

<select id="box_B" multiple="multiple">
    <optgroup label="1 - Toyota">
        <option value="1A - Camry">1A - Camry</option>
        <option value="1B - Yaris">1B - Yaris</option>
    </optgroup>
    <optgroup label="2 - Honda">
        <option value="2A - Civic">2A - Civic</option>
    </optgroup>
    <optgroup label="3 - Mercedes">
        <option value="3A - SL320">3A - SL320</option>
    </optgroup>

</select>

调用函数:

$(document).ready(function() {

    $("#box_A").multiSelect({}, showLabel);

}

感谢。

1 个答案:

答案 0 :(得分:0)

假设调用showLabel并在单击选项时传递jQuery事件对象,则可以使用:

function showLabel(e){ 
    var $target = $(e.target);
    if($target.is(':selected')){
         var label = $target.closest('optgroup').attr('label');
         alert(label);
    }
}

修改

在看了你发布的插件后,看起来我上面的假设是错误的。 showLabel没有被传递给jQuery事件,而是传递了被点击项目的jQuery对象,这也是一个复选框,而不是一个选项。请尝试使用此代码:

function showLabel($target){ 
    if($target.is(':checked')){
         var label = $target.closest('optgroup').attr('label');
         alert(label);
    }
}