0

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

4 回答 4

2

不要去ul和回来liprev()如果您需要获取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);
});
于 2013-07-24T18:30:42.947 回答
1

我认为你需要这个:

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

});

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

于 2013-07-24T18:35:01.593 回答
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/

于 2013-07-24T18:34:15.697 回答
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 );
 });
于 2013-07-24T18:36:41.597 回答