我希望能够点击标签,看看它属于哪个单选按钮组。我尝试了这个,但它总是找到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>
答案 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 );
});