2013-05-10 62 views
0

我試圖創建一個帶有多個單選按鈕的窗體。我生成使用for循環,像這樣的單選按鈕:在php中的單選按鈕的客戶端驗證

<form name="myForm" method="POST" id="myForm" action="result.php" onsubmit=""> 
<?php for ($i = 1; $i <= $row = mysqli_fetch_array($result); $i++) 
{ ?> 
    <input type="radio" name="opt<?php echo $i; ?>" id="opt<?php echo $i; ?>" value="A"/><br/> 
      <input type="radio" name="opt<?php echo $i; ?>" id="opt<?php echo $i; ?>" value="B"/> <?php } ?> 

我想確保每個單選按鈕組,有1個選擇的答案。我一直在不斷地尋找,我想出了這個代碼:

</script><script type="text/javascript"> 
function validate() { 
var x = "<?php echo $j;?>"; 

var formValid = false; 
for (var i = 1; i <= x; i++) 
{ 
    var y = document.getElementsByName("opt"+i);   
    var j = 0; 
    while (!formValid && j < y.length){ 
     if (y[j].checked) { 
      formValid = true; 
      j++; 
      alert("test"); 
     } 
     break; 
    } 
} 

if (!formValid) { alert("all fields required"); 
    return false; 
} 
else 
{ 
    var form = document.getElementById("myForm"); 
    form.submit(); 
}</script> 

我對這個問題即使所有的單選按鈕已經被選中,需要各個領域仍然彈出,表單將提交。有什麼我在這裏失蹤?請幫忙。我一直堅持這幾天。

+0

確保每個單選按鈕組具有相同名稱的屬性值的名字=「radioGroupOne」 NAME =「radioGroupTwo」,那麼它會工作 – HaBo 2013-05-10 02:04:45

+0

他們有相同的名稱。我已經檢查過,所以我不確定它爲什麼不起作用。我在我的代碼中改變了一些東西,特別是var j = i到var j = 0。然而,如果我已經有大約3個收音機打勾,表單已經提交,即使仍然有無線電要打勾。 – user1597438 2013-05-10 02:15:29

+0

你可以粘貼你的代碼生成的標記 – HaBo 2013-05-10 02:21:28

回答

1

一旦你找到了一個檢查欄,你就不會檢查其餘的,假設一切正常。

你想單獨檢查字段,當你看到一個不是有效的時候。

var formValid = true; 
for (var i = 1; i <= x; i++) 
{ 
    var fieldValid = false; 
    var y = document.getElementsByName("opt"+i);   
    var j = 0; 
    while (!fieldValid && j < y.length){ 
     if (y[j].checked) { 
      fieldValid = true; 
      break; 
     } 
     j++; 
    } 

    if (! fieldValid) 
    { 
     formValid = false; 
     break; 
    } 
} 
+0

你真棒。謝謝。乾杯。 – user1597438 2013-05-10 02:38:25