【问题标题】:How to get the radio buttons that are NOT checked (Jquery)?如何获取未选中的单选按钮(Jquery)?
【发布时间】:2017-05-05 12:41:03
【问题描述】:

我正在使用 php 和 mysql 构建一个动态移动测验应用程序。该应用程序包含 10 个多项选择题,其中一些(但不是全部)可能是单选按钮(其他是下拉选择)。

我想确保在启用提交按钮之前选择了所有单选按钮。这是我在 SO 上找到的脚本:

<script type="text/javascript">
    $(document).ready( function() {  
        $('#submitform').prop('disabled', true);
        inspectAllInputFields();
    });

    $('input[type=radio]').change(function() {
       inspectAllInputFields();
    });

    function inspectAllInputFields(){
         var count = 0;
         $('.radio-button').each(function(i){           
           if(  $(this).val() === '') {  // this line doesn't work
               count++;
            }
            if(count == 0){
              $('#submitform').prop('disabled', false);
            }else {
              $('#submitform').prop('disabled', true);              
            }
        });
    }
</script>

这是表单代码的摘录(我只是使用了前几个问题,其中 2 个是单选题,1 个是选择题):

<div class="row">
    <div class="col-md-8">
        <h5>1.  Question  1</h5>                                      
    </div>            
    <div class="col-md-4 questionclass">
        <div class="radio"> 
            <ul class="radio-button" name="question1_ul">
                <li>
                    <input type="radio" name="question1" value="true" id="question1_true">
                    <label for="question1_true">True</label>                                 
                </li>
                <li>
                    <input type="radio" name="question1" value="false" id="question1_false">
                    <label for="question1_false">False</label>                                 
                </li>
            </ul>
        </div>
    </div>
</div>

<div class="row">
    <div class="col-md-8">
        <h5>2. Question 2?</h5>      
    </div>            
    <div class="col-md-4 questionclass">
        <div class="radio"> 
            <ul class="radio-button" name="question2_ul">
                <li>
                    <input type="radio" name="question2" value="real" id="question2_real">
                    <label for="question2_real">Real</label>                                 
                </li>
                <li>
                    <input type="radio" name="question2" value="fake" id="question2_fake">
                    <label for="question2_fake">Fake</label>                                 
                </li>
            </ul>
        </div>
    </div>
</div>

<div class="row">
    <div class="col-md-8">
        <h5>3. Question 3 </h5>         
    </div>            
    <div class="col-md-4 questionclass">
        <select class="form-control bg-silver" name="question3"> 
            <option value="0-10%">0-10%</option>
            <option value="11-20%">11-20%</option>
            <option value="21-30%">21-30%</option>
            <option value="31-40%">31-40%</option>
            <option value="41-50%">41-50%</option>
            <option value="51-60%">51-60%</option>
            <option value="61-70%">61-70%</option>
            <option value="71-80%">71-80%</option>
            <option value="81-90%">81-90%</option>
            <option value="91-100%">91-100%</option>  
        </select>                
    </div>
</div>

 <!-- other questions deleted -->

 <button class="btn btn-primary btn-block " id="submitform" disabled>Compute results</button>

如何修复 jquery 代码,以便仅当用户单击所有单选按钮的某些内容时才启用提交按钮?

【问题讨论】:

标签: javascript jquery


【解决方案1】:

使用下面的javascript

$(document).ready( function() {  
    $('#submitform').prop('disabled', true);
    inspectAllInputFields();
});

$('input[type=radio]').change(function() {
   inspectAllInputFields();
});

function inspectAllInputFields(){
     var count = 0;
     $('#submitform').prop('disabled', false);
     $('.radio-button').each(function(i){           
      count = $(this).find('input[type=radio]:checked').length;
        if(count == 0){
          $('#submitform').prop('disabled', true);
        }
    });
}

请同时查看fiddle link

【讨论】:

  • 可能需要考虑一下解决方案中的选择器。
  • 谢谢 - 但问题是“this”指的是
      的单选按钮 class,而不是单选按钮 input本身。所以这行不通:(如何选择该 UL 类中的单选按钮输入?
  • 感谢亚当,但现在发生的事情是它计算了每一个无线电输入项。因此,对于上面的示例,有 2 个无线电组,但有 4 个无线电输入。您的函数返回的是无线电输入的计数 - 因此,如果用户选择了问题 1 和 2 的答案,则将检查 2 个输入,但不会检查其他 2 个输入。因此,即使用户正确回答了两个问题,该按钮仍将被禁用
  • 感谢@AgamBanga - 成功了!我将研究代码以了解此解决方案的确切工作原理。
  • @gauravkeerthi 很高兴我能帮上忙
【解决方案2】:

您可以使用 jquery is(":checked")。 或者您通过使输入字段成为必填项来尝试更好的方法 Disable button until all required fields are completed

    <script type="text/javascript">
        $(document).ready( function() {  
            $('#submitform').prop('disabled', true);
            inspectAllInputFields();
        });

        $('input[type=radio]').change(function() {
           inspectAllInputFields();
        });

        function inspectAllInputFields(){
           //If both checked enable submit button
          if($("input[name=question1]").is(":checked") && $("input[name=question2]").is(":checked")) {
             $('#submitform').prop('disabled', false);
          }
        }
    </script>

【讨论】:

  • 这仅在表单不是动态的情况下才有效(即我事先知道哪些问题是单选的,哪些是选择的),但此应用程序并非如此。因此,我无法对字段名称进行硬编码。有没有更好的办法?
【解决方案3】:

你需要使用.prop()函数

if($(this).prop('checked') !== false);

【讨论】:

  • 你需要使用.attr()函数使用.prop.
  • @George 如果 stackoverflow 上有一个花絮卷轴,那么肯定可以去那里
  • 另一个问题是“this”指的是
      的单选按钮类,而不是单选按钮输入本身。所以这行不通:(如何选择该 UL 类中的单选按钮输入?
  • 只查询输入元素$('.radio-button input').each(function(i){
  • 对不起,我的头在错误的地方。实际上是prop而不是attr函数来检查是否被选中
猜你喜欢
  • 2011-05-07
  • 2015-03-28
  • 2012-12-15
  • 2014-09-09
  • 2011-07-20
  • 1970-01-01
  • 2011-07-28
  • 1970-01-01
  • 2015-12-26
相关资源
最近更新 更多