如何选择混合输入的组元素之一?

时间:2012-05-08 07:51:25

标签: jquery forms jquery-selectors radio-button dom-traversal

如何选择混合输入的一个组元素?

我有以下代码:

<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对象的问题。感谢。

2 个答案:

答案 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>

jsFiddle Demo with labels added