【问题标题】:Check if at least one option is selected in a form with radio buttons and checkboxes检查是否在带有单选按钮和复选框的表单中选择了至少一个选项
【发布时间】:2011-04-18 16:34:43
【问题描述】:

在这个线程here 之后,我能够向带有单选按钮和复选框的表单添加验证:如果每个问题至少选择了一个选项,则启用提交按钮。

代码如下:

 $('input:submit').attr('disabled',true);
 var input_groups = {}
 $("input:radio, input:checkbox").each(function(){
                          $(this).attr('checked', false);
                          input_groups[this.name] = true;
                         });

 $('input:radio, input:checkbox').change(function() {

var submission = true;


for(group in input_groups){

   is_checked = !!$("[name=" + group + "]:checked").length

   if(!is_checked){ submission = false;}

}

if (submission){

        $("label[for='submit']").html('You are ready to submit!');
    $('input:submit').attr('disabled',false);
}

 });

它可以工作,但如果我不小心取消选中了一个复选框,提交按钮将保持启用状态...我可能遗漏了一些明显的东西...

有什么建议吗?

谢谢

【问题讨论】:

  • 顺便说一句,你的代码可以大大压缩。每当您测试一个布尔值然后在下一个语句中使用相同的布尔值时,都是一个需要压缩的区域。此外,当您达到失败状态(没有理由继续)时,您想跳出 @9​​87654323@ 循环。
  • 你说得对,亚当。我试图在优化之前让它工作。

标签: jquery radio-button checkbox


【解决方案1】:

在 onchange 处理程序中,您检查是否有任何检查并启用提交按钮,但如果检查失败,您忘记禁用它:

if (submission){
   $("label[for='submit']").html('You are ready to submit!');
   $('input:submit').attr('disabled',false);
} else {
   $("label[for='submit']").html('You are NOT ready to submit!');
   $('input:submit').attr('disabled',true);
}

【讨论】:

    【解决方案2】:

    您的代码:

    if (submission){
        $("label[for='submit']").html('You are ready to submit!');
        $('input:submit').attr('disabled',false);
    }
    

    只有在提交为假时才会执行,所以它没有设置为禁用。重构为:

    if (submission){
        $("label[for='submit']").html('You are ready to submit!');
    }
    $('input:submit').attr('disabled',!submission);
    

    【讨论】:

    • 谢谢。我怎么能错过呢?
    猜你喜欢
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    • 2018-05-11
    • 1970-01-01
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多