【问题标题】:How to make a choice of one of the group elements of mixed inputs?如何选择混合输入的组元素之一?
【发布时间】:2012-05-16 16:58:10
【问题描述】:

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

我有以下代码:

<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时,单选按钮应该会丢失checked atribure。 喜欢:

$('.item textarea').on('click', function(){
  $($(this).parent + 'input[type="radio":checked]').each(function(){
    $(this).checked = false;
  });
});

但它不起作用。 我认为parent 对象的问题。谢谢。

【问题讨论】:

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


    【解决方案1】:

    您的变体存在许多问题。首先,您的选择器构造存在问题:$($(this).parent + 'input[type="radio":checked]')。在这里,您将 jQuery 对象与不正确的字符串选择器混合在一起。此外,父元素采用方法parent(),但不是属性。那么,jQuery 对象就没有checked 属性了。

    考虑到所描述的所有问题,我们可以得到这个可行的代码:

    $('.item textarea').on('click', function() {
        $(this).siblings(":radio").prop("checked", false);
    });
    

    演示: http://jsfiddle.net/TEk9c/

    顺便说一句,如果您需要在用户输入textarea时取消选中所有收音机,不仅使用鼠标click,而且使用键盘,您可以使用focus事件。

    【讨论】:

      【解决方案2】:

      如果你想基于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);
      });
      

      一个有效性说明&lt;input&gt; 是一个void element,它里面不能有内容和关闭属性。你必须使用&lt;label&gt; 元素来给它一个,嗯,标签:

      <label><input type="radio" name="group1" value="value1" /> Value1</label>
      

      jsFiddle Demo with labels added

      【讨论】:

      • 关于有效性说明,确实取决于DOCTYPE
      • @VisioN 在哪个 DOCTYPE 中&lt;input&gt;xy&lt;/input&gt; 有效?
      • 啊,是的...我完全错过了那部分代码 :) 抱歉!
      • 是的。我错过了name。谢谢。
      猜你喜欢
      • 1970-01-01
      • 2018-06-23
      • 2014-11-13
      • 1970-01-01
      • 2017-08-10
      • 1970-01-01
      • 2013-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多