2011-04-18 146 views
0

继此线程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); 
} 

}); 

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

任何建议?

谢谢

+0

您的代码可以大大压缩的方式。每当你测试一个布尔值,然后在你的下一个语句中使用相同的布尔值是一个压缩区域。此外,当您达到失败状态时(无理由继续),您希望跳出“for”循环。 – 2011-04-18 16:51:05

+0

你是对的亚当。我试图在优化之前使其工作。 – Mirko 2011-04-19 08:47:23

回答

1

您的代码:

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

只有在提交为false时才会执行此操作,因此不会将其设置为禁用。重构为:

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

谢谢。我怎么会错过? – Mirko 2011-04-19 13:54:32

2

在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); 
} 
相关问题