【问题标题】:Getting the value of a checked radio button not working获取选中的单选按钮的值不起作用
【发布时间】:2016-01-28 08:41:21
【问题描述】:

我在 jquery 中遇到了一些挑战。

在我的 jquery 代码中,我做的第一件事是,每当加载页面时,它应该隐藏 div 的内容,并且每当单击按钮时,应该显示 div 的内容。

它工作得很好,但我遇到的是我想获取选中的单选按钮的值,然后提醒它。

我为获取选中的单选按钮的值而编写的代码仅在这些单选按钮放置在 div 之外时才有效,但是当它们放置在 div 内时,它会提醒一个空值。

这是我的 jquery sn-p:

<script type='text/javascript'>

$(document).ready(function() {

   $("#section_div").hide();

   $("#show").click(function() {
       $("#section_div").fadeIn(1000);
   });

   $("#option:checked").live('change', function() {
     var selected_option = $('input[name=option]').filter(':checked').val();
    alert(selected_option);
   });                                                                          

});

</script>

这是 HTML:

<div id='section_div'>
    <input type='radio' name='option' id='option' value='yes'/>Yes
    <input type='radio' name='option' id='option' value='no'/>No
</div>
<button id='show'> Show div </button>

【问题讨论】:

  • 你的 HTML 是什么样的?在一种情况下,您通过 ID (#option) 引用您的选项元素,而在另一种情况下,您通过名称引用它们。另外,您使用的是什么版本的 jQuery? .live() 在 1.9 版中被移除。
  • 嗨,请阅读:How to create a Minimal, Complete, and Verifiable example。提供的代码不完整(缺少相关的 HTML),因此无法验证。
  • HTML 代码已更新。请再次查看以上帖子
  • 好的。谢谢。但真正的问题是,上面的 sn-p 在单独使用时有效,但每当与 PHP(foreach 循环)一起使用时,它就会出现故障。即,只要选中任何单选按钮,它就会提醒一个空值。
  • “但真正的问题......无论何时与 PHP 一起” - 有趣的是问题中没有提到这些!请阅读上面的 MCVE 链接并在问题中尝试您的代码。我们无法回答没有事件暗示的事情。

标签: javascript jquery


【解决方案1】:

在这里检查这个工作小提琴:fiddle

如果你使用:

 $("input[name=option]").on('change', function() {
    var selected_option = $('input[name=option]').filter(':checked').val();
    alert(selected_option);
  });

即使单选按钮在 div 内,也会提醒选择。

【讨论】:

  • 如果您再次单击同一个单选按钮,这将不起作用。
【解决方案2】:

尝试摆脱重复的 id,jQuery 选择器不喜欢这些。当我使用 jQuery attribute selectors 时,它对我有用。

这里:

$(document).ready(function() {
   $("#section_div").hide();

   $("#show").click(function() {
       $("#section_div").fadeIn(1000);
   });

   $("input[name='option']").on('click', function(event) {
     var selected_option = event.target;
     alert(selected_option.value)
   });     
});

Here is a working codepen

【讨论】:

    【解决方案3】:

    对于附加到id 的无线电元素和事件,您得到相同的id,因此它会导致问题。

    您可以使用类更新 html 并在类上添加事件,或者使用无线电的name 更新现有事件。更新每个无线电的ids 以供不同用途使用。

     $("input[name=option]").on('change', function() {
     var selected_option = $('input[name=option]').filter(':checked').val();
     alert(selected_option);
     });   
    

    JSFiddle https://jsfiddle.net/qfttmona/

    【讨论】:

      【解决方案4】:

      试试这个fiddle here,我在html中的每个输入上将id="option"更改为id="option1"id="option2",还更改了javascript中的input[name=option]选择器。

      <div id='section_div'>
        <input type='radio' name='option' id='option1' value='yes' />
        <label for="option1">Yes</label>
        <input type='radio' name='option' id='option2' value='no' />
        <label for="option2">No</label>
      </div>
      <button id='show'> Show div </button>
      <script>
      $(function() {
        $("#section_div").hide();
        $("#show").click(function() {
          $("#section_div").fadeIn(1000);
        });
        $("input[name=option]").on('change', function() {
          var selected_option =
            $('input[name=option]').filter(':checked').val();
          alert(selected_option);
        });
      });
      </script>
      

      【讨论】:

        【解决方案5】:

        您实际上需要将click 事件处理程序附加到位于div 内的radio 按钮,ID 为#section_div

            $("#section_div input:radio").on('click', function() {
             var selected_option = $(this).val();
            alert(selected_option);
           });  
        

        工作示例:https://jsfiddle.net/DinoMyte/s0duxn5f/5/

        【讨论】:

        • 好的。非常感谢。我会试着用你的更正来弄清楚。上帝保佑你们。
        • 当然。希望对您的方法有所帮助:)
        • 选中的选项总是你点击的那个,所以你可以直接使用$(this).val()
        • @Barmar:同意。我什至没有看那部分代码。感谢您的干预。 +1
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-07-13
        • 2017-11-25
        • 2012-07-18
        • 2016-11-09
        • 2013-06-22
        • 2015-12-11
        相关资源
        最近更新 更多