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循環。有沒有辦法避免這種情況?
我猜是因爲你在掃描過的位置改變了DOM。只是好奇,但爲什麼不使用jQuery,讓你的生活更輕鬆? –
JavaScript對我而言是新生事物,我更願意在使用jQuery簡化事物之前瞭解這些細節。 – ryandlf
如果使用[]屬性訪問表示法:'document [formName] [fieldArray [i]]。value' – hugomg