2013-10-31 152 views
2

我能夠在此處看到警報消息。即使返回false後,我也可以看到我的表單發佈。代碼在哪裏被破壞?javascript不返回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

nope。它只是提醒我的消息,並繼續張貼表格。 – JakeNsmith

回答

2

功能ValidateForm沒有return聲明。你擁有的只是一個是在匿名函數傳遞給forEach

  • 定義一個變量,你叫forEach
  • 之前給它的默認值(可能true
  • 更改它,當您去周圍的環(具體邏輯將取決於你在找什麼,但很可能是if (condition) { retVal = false; }沒有else
  • 返回它在最後

這樣的:

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

另外,使用傳統的for循環:

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

這不是工作夥伴..我想isValid應該退出這個匿名函數。 – JakeNsmith