0

我有一个包含几个文本输入和复选框的表单(复选框来自数据库),所以......我知道如何单独验证它们,但我需要一起验证它们,我这样做的方式只验证复选框,我知道为什么会这样,但我不知道如何写正确的方式...¿你能帮帮我吗?这是代码:

<form action="sendreq.php" name="contact" onsubmit="return valida_frm(this)" method="post">
                <label>Name</label>
                <input name="name" type="text" />

                <label>Email</label>
                <input name="email" type="text"/><!-- And Severeal inputs then the checkboxes-->

<?php $list3 = mysql_query("SELECT * FROM products ORDER BY id ASC LIMIT 20"); 
                    while($row = mysql_fetch_object($list3)){ ?>


                <input id="product" name="product[]" class="label" type="checkbox" value="<?php echo $row->name?>"><label class="label"><?php echo $row->name?></label>                    

                <?php }?>

验证不能正常工作,原因很明显,我只需要正确的方式来编写和统一警报的返回:

function valida_frm(form){
var alerta="Ooops:\n";
if (form.name.value == "") {alerta+="Name.\n";} 
if (form.email.value == "") {alerta+="Email.\n";}

for(var i = 0; i < form.product.length; i++){ 
    if(form.product[i].checked)return true;} 
    alert('Oooops'); 
    return false;   

if (alerta!="Error:\n"){
    alert(alerta);  
    return false;
}else{
    return true;
}   
}

谢谢你的时间!

4

1 回答 1

1

不要为“name”调用字段,然后测试 form.name,因为它已经有一个 .name

然后测试 form["product[]"] 而不是 form.product - 你不能有 id="product" 因为 ID 必须是唯一的!我建议你给id="product<?echo $somecounter; ?>" />...<label for="product<? echo $somecounter; ?>">...</label>

还测试错误(或我的建议中的任何内容)而不是糟糕

还修复了更多问题

演示

function valida_frm(form){
  var alerta="";
  if (form.name.value == "") {alerta+="Name.\n";}  // Please use FullName or such
  if (form.email.value == "") {alerta+="Email.\n";}
  var chks = form["product[]"],
      checked = false;
  for(var i = 0; i < chks.length; i++) { 
    if(chks[i].checked) {
      checked = true;
      break;
    }
  } 
  if (!checked) {
    alerta+='Product.\n'; 
  }  
  if (alerta){
    alert("Error:\n"+alerta);  
    return false;
  }
  return true;
}  
于 2013-04-28T04:46:56.083 回答