在标签上单击返回其无线电组名称

时间:2013-07-24 18:26:51

标签: javascript jquery

http://jsfiddle.net/Yuxfv/2/

我希望能够点击标签,看看它属于哪个单选按钮组。我尝试了这个,但它总是找到li(name = left)之后的第一个输入,而不是最接近标签的输入。我该如何解决这个问题?

$('input[type=radio]:enabled + label').click(function () {
    var thisGroupName = $(this).closest('ul').find('input[type=radio]:enabled').attr('name');
    alert("group name: " + thisGroupName);
});

HTML

<ul>
    <li>
        <input type="radio" class="radio-red" name="left" id="a1">
        <label for="a1">a1</label>
        <input type="radio" class="radio-blue" name="right" id="a2">
        <label for="a2">a2</label>
    </li>
    <li>
        <input type="radio" class="radio-red" name="left" id="b1">
        <label for="b1">b1</label>
        <input type="radio" class="radio-blue" name="right" id="b2">
        <label for="b2">b2</label>
    </li>
    <li>
        <input type="radio" class="radio-red" name="left" id="b3">
        <label for="b3">b3</label>
        <input type="radio" class="radio-blue" name="right" id="b4">
        <label for="b4">b4</label>
    </li>
</ul>

4 个答案:

答案 0 :(得分:2)

不要转到ul并返回li。如果您需要获取prev()的群组,请尝试使用input

$('input[type=radio]:enabled + label').click(function () {
   var thisGroupName = $(this).prev('input[type=radio]:checked').attr('name');
   alert("group name: " + thisGroupName);
});

为了更具体,您有for属性。为什么不用那个?

$('input[type=radio]:enabled + label').click(function () {
       var thisGroupName = $("#" + $(this).attr("for")).attr('name');
       alert("group name: " + thisGroupName);
});

答案 1 :(得分:1)

我认为你需要这个:

$('label').click(function(){
 var forRadio = $(this).attr('for');
 var groupName = $('#'+forRadio).attr('name');
alert(groupName);

});

我在这里做了一个jsfiddle http://jsfiddle.net/psmkw/

答案 2 :(得分:0)

在您提供的代码示例中,您还可以使用所点击标签的“for”属性显式查找单选按钮。

$(document).ready(function () {
    $('input[type=radio]:enabled + label').click(function () {
        var forName = $(this).attr('for');
        var thisGroupName = $('#' + forName).attr('name');
            alert("group name: " + thisGroupName);
    });
});

它在这个jsFiddle中工作: http://jsfiddle.net/Yuxfv/4/

答案 3 :(得分:0)

以这种方式遍历DOM是没有意义的,标签具有对元素的引用。单击标签时单击它。

 $('input[type=radio]:enabled + label').click(function () {
    var input_id = '#'+$(this).attr('for');
    var group_name = $(input_id).attr('name');
    alert("group name: " + group_name );
 });