【问题标题】:Set selected radio from radio group with a value使用值设置从收音机组中选择的收音机
【发布时间】:2011-06-04 20:39:06
【问题描述】:

我为什么要为此苦苦挣扎?

我有一个值:5

如何查看组“mygroup”的单选按钮,值为 5?

$("input[name=mygroup]").val(5); // doesn't work?

【问题讨论】:

    标签: jquery


    【解决方案1】:

    attribute selector 的帮助下,您可以选择具有相应值的输入元素。然后你必须明确设置属性,使用.attr

    var value = 5;
    $("input[name=mygroup][value=" + value + "]").attr('checked', 'checked');
    

    从 jQuery 1.6 开始,您还可以使用带有布尔值的 .prop 方法(这应该是首选方法):

    $("input[name=mygroup][value=" + value + "]").prop('checked', true);
    

    请记住,您首先需要从一个单选按钮组下的任何单选按钮中删除选中的属性,然后您才能将选中的属性/属性添加到该单选按钮组中的一个单选按钮。

    从一个单选按钮组的所有单选按钮中删除选中属性的代码 -

    $('[name="radioSelectionName"]').removeAttr('checked');
    

    【讨论】:

    • .prop('checked', true) 可能更好或 .is()
    • @bladefist: .is 在这里无济于事,但我同意.prop。当时不可用;)将更新我的答案。谢谢!
    • 如果单选按钮的值有小数,则需要将值放在引号中
    • @Robert:是的,可能。来自documentation“可以是不带引号的单个单词或带引号的字符串。”
    • 见乔纳森的回答。 jQuery 文档显示 .val() 支持在单选或复选框组上设置值。这个答案的方式在技术上是可行的,但是是迂回的,可读性/记忆性要差得多。
    【解决方案2】:

    检查单选和复选框有更好的方法;您必须将 值数组 传递给 val 方法而不是原始值

    注意:如果您只是单独传递值(而不是在数组中),这将导致“mygroup”的所有值都设置为该值.

    $("input[name=mygroup]").val([5]);
    

    这里是解释其工作原理的 jQuery 文档:http://api.jquery.com/val/#val-value

    并且.val([...]) 也适用于<select> 内的<input type="checkbox"><input type="radio"><option>s 等表单元素。

    将检查或选择具有与 数组 的元素之一匹配的值的输入和选项,而具有与数组的元素之一不匹配的值的输入和选项将被取消选中或取消选择

    小提琴演示此工作:https://jsfiddle.net/92nekvp3/

    【讨论】:

    • 接受的答案(嗯,应该是)。从 jQuery 1.0 开始,请参阅文档中的最后一个示例(滚动到底部):api.jquery.com/val 复制到此处:jsfiddle.net/JoePC/w1f9ykso
    • 这是设置所有输入值的好方法。太糟糕了,我花了 6 年时间才了解它。
    • 花了很长时间试图弄清楚为什么我在组中的所有值都设置为传递的值而不是检查值。结果是我自己传递了值,而不是在数组中。
    【解决方案3】:

    试试这个:

    $('input:radio[name="mygroup"][value="5"]').attr('checked',true);
    

    JS Fiddle demo.

    【讨论】:

    • @Hunter,谢谢...今天显然 不是我的 jQuery 日... =/
    【解决方案4】:
    $("input[name='mygroup'][value='5']").attr("checked", true);
    

    【讨论】:

      【解决方案5】:

      当您像上面提到的那样更改属性值时,change 事件不会被触发,因此如果由于某些原因需要,您可以像这样触发它

      $('input[name=video_radio][value="' + r.data.video_radio + '"]')
             .prop('checked', true)
             .trigger('change');
      

      【讨论】:

        【解决方案6】:

        $("input[name='RadioTest'][value='2']").prop('checked', true);

        JS fiddle Demo

        【讨论】:

          【解决方案7】:

          纯 JavaScript 版本:

          document.querySelector('input[name="myradio"][value="5"]').checked = true;
          

          【讨论】:

            【解决方案8】:

            或者你可以只写 value 属性给它:

            $(':radio[value=<yourvalue>]').attr('checked',true);
            

            这对我有用。

            【讨论】:

              【解决方案9】:
              var key = "Name_radio";
              var val = "value_radio";
              var rdo = $('*[name="' + key + '"]');
              if (rdo.attr('type') == "radio") {
               $.each(rdo, function (keyT, valT){
                 if ((valT.value == $.trim(val)) && ($.trim(val) != '') && ($.trim(val) != null))
              
                 {
                   $('*[name="' + key + '"][value="' + (val) + '"]').prop('checked', true);
                 }
                })
              }
              

              【讨论】:

              • 您能否解释一下您的代码在您的答案中的作用?至少一句话左右。以及它如何解决解决方案。谢谢。
              【解决方案10】:

              使用时出错

              $("input[name=mygroup][value="value"]").prop('checked', true);
              

              工作方式是

              $("input[name=mygroup][value='value']").prop('checked', true);
              

              问题是处理引号(')和双引号(“)。

              【讨论】:

                【解决方案11】:

                第一种方法假设无线电组(输入)已经保存了一个参考:group,并且希望在组中选择一个,value

                const group = document.querySelectorAll('input[name="contact"]');
                
                function selectGroupByValue(group, value){
                  const input = [...group].find(el => el.value === value);
                  if(input) input.checked = true;
                }
                
                selectGroupByValue(document.querySelectorAll('input[name="contact"]'), 'phone');
                <input type="radio" name="contact" value="email">
                <input type="radio" name="contact" value="phone">
                <input type="radio" name="contact" value="mail">

                这可以更进一步,通过name创建一个更强大的函数,可以改变任何组的值:

                function selectGroupByValue(name, value){
                  const group = document.querySelectorAll(`input[name="${name}"]`);
                  const input = [...group].find(el => el.value === value);
                  if(input) input.checked = true;
                }
                
                selectGroupByValue('contact', 'phone');
                <input type="radio" name="contact" value="email">
                <input type="radio" name="contact" value="phone">
                <input type="radio" name="contact" value="mail">

                下面的示例完全不同,因为它没有对无线电组的缓存引用,但每次都会进行查找:

                const selectedValue = 'phone';
                const input = document.querySelector(`input[name="contact"][value="${selectedValue}"`);
                if(input) input.checked = true;
                <input type="radio" name="contact" value="email">
                <input type="radio" name="contact" value="phone">
                <input type="radio" name="contact" value="mail">

                如果组在 &lt;form&gt; 元素内: (故意没有破坏 for 迭代器)

                for (const [index, input] of document.forms[0].contact.entries())
                  if(input.value === `phone`)
                    input.checked = true
                <form>
                  <input type="radio" name="contact" value="email">
                  <input type="radio" name="contact" value="phone">
                  <input type="radio" name="contact" value="mail">
                </form>

                【讨论】:

                  【解决方案12】:
                  $('input[name="mygroup"]').val([5])
                  

                  【讨论】:

                  • 您能否解释一下您的解决方案与已经提供的其他解决方案有何不同?
                  • @Giovani Vercauteren ,我们应该将名称作为字符串给出。所以我在代码中将 mygroup 作为字符串给出。
                  猜你喜欢
                  • 2011-11-10
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-04-26
                  • 2013-10-20
                  • 2017-07-22
                  • 1970-01-01
                  • 2012-10-16
                  相关资源
                  最近更新 更多