如何选择混合输入的一个组元素?
我有以下代码:
<div class="item">
<input type="radio" name="group1" value="value1">Value1</input>
<input type="radio" name="group1" value="value2">Value2</input>
<input type="radio" name="group1" value="value3">Value3</input>
<textarea name="group1"></textarea>
</div>
<div class="item">
<input type="radio" name="group2" value="value1">Value1</input>
<input type="radio" name="group2" value="value2">Value2</input>
<input type="radio" name="group2" value="value3">Value3</input>
<textarea name="group2"></textarea>
</div>
我想:当我们点击textarea时,radiobuttons应该丢失checked
个人。
像:
$('.item textarea').on('click', function(){
$($(this).parent + 'input[type="radio":checked]').each(function(){
$(this).checked = false;
});
});
但它不起作用。
我认为parent
对象的问题。感谢。
答案 0 :(得分:3)
您的变体中存在许多问题。首先,您的选择器构造存在问题:$($(this).parent + 'input[type="radio":checked]')
。在这里,您将jQuery对象与不正确的字符串选择器混合在一起。此外,父元素采用方法parent()
但不是属性。然后,jQuery对象没有checked
属性。
考虑到所描述的所有问题,我们可以得到这个可行的代码:
$('.item textarea').on('click', function() {
$(this).siblings(":radio").prop("checked", false);
});
DEMO: http://jsfiddle.net/TEk9c/
顺便说一下,如果您需要在用户不仅使用鼠标textarea
而是使用键盘输入click
时取消选中所有无线电,您可以使用focus
事件。
答案 1 :(得分:1)
如果您想将其基于name
属性,则可以使用Attribute Equals Selector:
$('.item textarea').on('click', function() {
$(':radio[name="' + this.name + '"]').prop("checked", false);
});
如果您需要的单选按钮始终位于同一div.item
,您甚至可以编写更严格的解决方案。在此示例中,首先我们找到具有类item
的最近父级,并在其中搜索具有相同name
属性的无线电。
$('.item textarea').on('click', function() {
$(this).closest('.item')
.find(':radio[name="' + this.name + '"]')
.prop("checked", false);
});
一个有效性注释:<input>
是void element,它不能包含内容和关闭属性。你必须使用<label>
元素给它一个,hm,标签:
<label><input type="radio" name="group1" value="value1" /> Value1</label>