2013-03-24 138 views
0

所以我試着做一個循環遍歷表單元素的函數,並檢查元素的長度,如果是這樣,請更改類,使它們的樣式可以不同。我假設的代碼可以工作,而且我的控制檯中沒有出現任何錯誤,所以我無法準確指出問題所在。如果有人可以告訴我爲什麼這不起作用或如何解決這將是很棒!謝謝!什麼是我的表單驗證功能失敗?

function validate_form(){ 
var form = document.forms['form_name']; //store form into a variable 
var validated = true; // store return value for onsubmit attribute 
    for(i=0; i<form.elements.length; i++){ 
     if(form.elements[i].value.length){ // check if form elements are empty 
      form.elements[i].className = "validate_failed"; // if elements are empty, add a class that will style them 
      validated = false; 
      return validated; 
    } else{ 
     validated = true; 
     return validated; 
    } 
    return validated; 
} 
return validated; 
} 
+0

這可能是一個缺少'變種I;'你正在返回的方式過於頻繁。 – Joe 2013-03-24 19:24:47

+0

該回路設置我在發生的開始? – 2013-03-24 19:25:44

+0

問題是什麼?究竟發生了什麼?這種風格不適用嗎?風格是否在錯誤的時間應用?請具體說明。 – Markasoftware 2013-03-24 19:26:41

回答

2

嘗試

function validate_form(){ 
    var form = document.forms['form_name']; //store form into a variable 
    for(var i=0; i<form.elements.length; i++){ 
    if(form.elements[i].value.length===0){ // check if form elements are empty 
     form.elements[i].className = "validate_failed"; // if elements are empty, add a class that will style them 
     return false; 
    } 
    return true; 
} 

假設

<form onsubmit="return validate_form()" ... 

還是讓這一切不顯眼

window.onload=function() { 
    document.forms['form_name'].onsubmit=function() { 
    for(var i=0; i<this.elements.length; i++){ 
     this.elements[i].className = ""; 
     if(this.elements[i].value.length===0){ // check if form elements are empty 
     this.elements[i].className = "validate_failed"; // if elements are empty, add a class that will style them 
     return false; 
     } 
     return true; 
    } 
    } 
} 
+0

這就是它!其實我在等待更多答案的時候改變了原來的代碼,所以我在閱讀你的答案之前就明白了。但是我們的代碼是相同的,所以這意味着我們都是對的。謝謝你非常想幫忙! – 2013-03-24 19:43:25

1

因爲你是第一次運行期間通過環回validated,你永遠只能檢查表單的第一個元素。你只需要設置validated,並在循環之後返回(或者當你第一次將它設置爲false時,取決於你想要做什麼的時候返回)。

此外,像喬評論說的,你應該有var i而不是隻有i,以便i不是全球性的。

0

下面的代碼將空的單元工作

if(!form.elements[i].value.length){ 

OR

if(form.elements[i].value.length === 0){