2011-10-11 97 views
0

我正在使用javascript來驗證某些表單元素。提交表單時,我想要的字段會傳遞到我的validateReqFields函數中。一切工作完美,直到我到了for循環,這意味着添加一個錯誤信息在表單字段旁邊的空。看來只要一個字段失敗並且它將消息添加到div,for循環就不會繼續。返回HTML結束循環過早

的HTML表單元素:

First Name <input type="text" name="firstName" onkeypress="return checkField(event, letters);"/><div id="firstNameMsg" style="display:inline-block;"></div> 
<br> 
Last Name <input type="text" name="lastName" onkeypress="return checkField(event,  letters);"/><div id="lastNameMsg" style="display:inline-block;"></div> 

JavaScript函數:

function validateReqFields(formName, reqFields){ 
var fieldArray = reqFields.split(","); 
var failedList = new Array(); 
var message = "Required Field"; 

for(var i=0; i<fieldArray.length; i++){ 
    removeWhiteSpace(fieldArray[i]); 
    var s = eval('document.'+formName+'.'+fieldArray[i]+'.value'); 
    if(s.length<1) { failedList.push(fieldArray[i]); } 
} 

if(failedList.length >= 1) { 

    for(var i=0; i<failedList.length; i++) { 
     //BUG - Only shows first failed field. 
     document.getElementById(failedList[i] + 'Msg').innerHTML = message; 
    } 

} else { 
    document.mForm.submit(); 
} 
} 

function removeWhiteSpace(mString){ 
mString = mString.replace(/(^\s+|\s+$)/g,' '); 
return mString; 
} 

我已經做了一些測試,並得出結論,當for循環設置innerHTML的第一個div元素,它打破for循環。有沒有辦法避免這種情況?

+0

我猜是因爲你在掃描過的位置改變了DOM。只是好奇,但爲什麼不使用jQuery,讓你的生活更輕鬆? –

+1

JavaScript對我而言是新生事物,我更願意在使用jQuery簡化事物之前瞭解這些細節。 – ryandlf

+0

如果使用[]屬性訪問表示法:'document [formName] [fieldArray [i]]。value' – hugomg

回答

0

我的removeWhiteSpace功能無法正常工作,因此我的第一個字段後的所有內容都失敗了。愚蠢的錯誤。請關閉這個問題。