2012-06-09 3 views
1

몇 가지 이유 때문에 내 자바 스크립트 양식 유효성 검사가 테이블의 모든 행을 통과하지 않습니다. I는 아래의 코드로 테이블을 작성 : 은 $ USR 변수가 다른 프로세스의 단지 결과 :자바 스크립트 양식 HTML 테이블의 행 확인

<form name="myForm" action="addAccessories.php" method="post" onsubmit="return validateForm(this);"> 
     <table border="1" id="IT"> 
      <tr> 
       <th>Barcode<em>*</em></th> 
       <th>Current stock</th> 
      </tr>  
     <?php 
      for($id=1; $id<=$usr; $id++){     
     ?> 
      <tr>      
       <td><input type="hidden" name="id[]" value="<?php echo $id; ?>" /> 
        <input type="text" name="bar_code<?php echo $id; ?>" id="bar_code<?php echo $id; ?>" value="" /></td>     
       <td><input type="text" name="num_stock<?php echo $id; ?>" value="0" id="num_stock<?php echo $id; ?>"/></td> 
     <?php 
      } 
     ?> 
      <tr> 
       <td> </td> 
       <td> <button data-theme="b" input type="submit" name="Submit" value="Submit">Add accessories</button></td> 
      </tr> 
     </table> 
    </form> 

이 테이블의 행의 수이다 : 로우 = $ USR + 1

내 유효성 확인 양식 코드 :

<script type="text/javascript">   
function validateForm(){  
var errors = [];   
for(i = 1; i < document.getElementById("IT").rows.length; i++){ 
     var barcode = document.getElementById('bar_code'+i).value; 
    var des = document.getElementById('description'+i).value; 
    var num_stock = document.getElementById('num_stock'+i).value;   

    if(barcode == null || barcode == ""){ 
     errors[errors.length] = "You must enter barcode."; 
    } 
    if(isNaN(num_stock)){ 
     errors[errors.length] = "Current stock must be an integer"; 
    } 
    if(num_stock < 0){ 
     errors[errors.length] = "Current stock must be a positive number"; 
    } 

    if (errors.length > 0) { 
    reportErrors(errors); 
    return false; 
    } 
    return true; 
    } 
} 
function reportErrors(errors){ 
var msg = "There were some problems...\n"; 
for (var i = 0; i<errors.length; i++) { 
    var numError = i + 1; 
    msg += "\n" + numError + ". " + errors[i]; 
} 
alert(msg); 
} 
</script> 

이 프로세스는 테이블의 첫 번째 행의 유효성을 검사 한 다음 중지합니다. 아무도 나에게 무엇이 잘못되었고 어떻게 고칠 지 보여 줄 수 있습니까? 도움을 주셔서 대단히 감사합니다.

+0

방화범이나 기타의 오류가 있습니까? –

답변

0

코드로 인해 필요한 것보다 훨씬 복잡한 방법이 사용되고 있습니다. 더 간단한 접근법은 폼 컨트롤을 처리하는 것입니다. 테스트에 있음을

function validateForm(form) { 
    var errors = []; 
    var c, cs = form.elements; 
    var reB = /^bar_code/; 
    var reN = /^num_stock/; 
    var reD = /^[0-9]+$/; 

    for (var i=0, iLen=cs.length; i<iLen; i++) { 
    c = cs[i]; 

    if (reB.test(c.name) && c.value == '') { 
     errors.push('You must enter barcode.']; 

    } else if (reN.test(c.name) && !reD.test(c.value)) { 
     errors.push('Stock number must be a positive integer.']; 
    }  
    } 

    // deal with errors... 

} 

참고 : 이미 제출 리스너에서 폼에 대한 참조를 전달하기 때문에 첫 번째 테스트가 true를 돌려 결코 있도록

> barcode == null || barcode == "" 

바코드 문자열, 인 비어 있는지 확인하려면 초 만 있으면 충분합니다.

+0

고맙습니다. 그러나 당신이 제안한대로 사용하려고했지만 전혀 작동하지 않았습니다./^ num_stock /은 모든 num_stock을 양식에서 가져 오는 것입니까? –

+0

예. 아이디어는 폼 컨트롤을 반복하고 정규 표현식을 사용하여 이름과 일치시킵니다.'/^num_stock /'은 그 문자로 시작하는 문자열과 일치해야합니다. – RobG

관련 문제