2013-10-31 5 views
2

여기에서 경고 메시지를 볼 수 있습니다. 허위로 돌아간 후에도 양식을 게시 할 수 있습니다. 코드가 손상된 곳은 어디입니까?자바 스크립트가 false를 반환하지 않습니다

function ValidateForm(){ 
    var productName = document.addProduct.product_name; 
    var partNumber = document.addProduct.part_number; 
    var description = document.addProduct.description; 
    var price = document.addProduct.price; 

    var formelements = [productName, partNumber, description, price]; 
    formelements.forEach(function(obj) { 
     if(obj.value=="") { 
      obj.style.borderColor = "#FF0000"; 
      alert(obj); 
      return false; 
     } 
    }); 

내 HTML 코드는

<form action="product_formhandler.php" name="addProduct" id="addProduct" onsubmit="return ValidateForm();" method="post"> 
    <table> 
     <tr> 
      <td> 
       Product Name: 
      </td> 
      <td> 
       <input type="text" id="product_name" name="product_name" /> 
      </td> 
     </tr> 
     <tr> 
      <td> 
       Part number: 
      </td> 
      <td> 
       <input type="text" id="part_number" name="part_number" /> 
      </td> 
     </tr> 
     <tr> 
      <td> 
       Description: 
      </td> 
      <td> 
       <textarea id="description" name="description" rows="8" col="25"></textarea> 
      </td> 
     </tr> 
     <tr> 
      <td> 
       Price: 
      </td> 
      <td> 
       <input type="text" id="price" name="price" /> 
      </td> 
     </tr> 
     <tr> 
      <td colspan="2" style="text-align: center;"> 

       <input type="reset" id="reset" value="Reset" /> 
       <input type= "hidden" name="addproduct" value="1" /> 
       <input type="submit" id="addProductSubmit" name="action" value="Add" /> 
      </td> 
     </tr> 
    </table> 
</form> 
+0

당신이 오류를 받고 있습니까? –

+0

방금 내 메시지에 경고하고 계속 양식을 게시했습니다. – JakeNsmith

답변

2

기능 ValidateFormreturn 문이 없습니다. 당신이 가진 유일한 사람은 당신이 forEach

  • 를 호출하기 전에 변수를 정의하면 루프 주위에 가서 (아마 true)
  • 변경에게 그것을 그것을 디폴트 값을 지정 forEach

    • 에 전달 익명 함수에 (특정 논리는 당신이 찾고있는 무엇에 따라 달라집니다, 그러나 아마 어떤 elseif (condition) { retVal = false; } 될 것입니다) 마지막
    ,691에서
  • 는 Return

    는 :

    var retVal = true; 
    formelements.forEach(function(obj) { 
        if(obj.value=="") { 
        obj.style.borderColor="#FF0000"; 
        alert(obj); 
        retVal = false; 
    }); 
    return retVal; 
    

    또는 루프 전통을 사용 :이 방법은 즉시 하나의 오류가 발견으로을 중지

    for (var i = 0; i < formelements.length; i++) { 
        var obj = formelements[i]; 
        if (obj.value == "") { 
         obj.style.borderColor="#FF0000"; 
         alert(obj); 
         return false; 
        } 
    } 
    

    있지만.

  • 0

    forEach 루프에서 false을 반환했습니다. 이 아닌 유효성 검사 기능. 이 대신 같은 것을 수행해야합니다 :

    /* Declare variable outside of loop which is set to true by default */ 
    var forEachResult = true; 
    formelements.forEach(function(obj) { 
        if(obj.value=="") { 
        obj.style.borderColor="#FF0000"; 
        alert(obj); 
        /* Rather than returning false, set the variable to false instead. */ 
        forEachResult = false; 
        /* Break the loop. */ 
        return; 
    } 
    /* Return the variable which will either be true or false. */ 
    return forEachResult; 
    
    -1
    function ValidateForm(){ 
        var productName=document.addProduct.product_name; 
        var partNumber=document.addProduct.part_number; 
        var description=document.addProduct.description; 
        var price=document.addProduct.price; 
    
        var formelements =[productName, partNumber, description, price]; 
    
        var isValid = true; 
        formelements.forEach(function(obj) { 
         if(obj.value=="") { 
          obj.style.borderColor="#FF0000"; 
          alert(obj); 
          isValid = false; 
          return false; 
         } 
        }); 
    
        return isValid; 
    } 
    
    +0

    이것은 isnt working buddy입니다. isValid는 익명의 함수에서 반환되어야합니다. – JakeNsmith