我正在處理提交數據前有驗證腳本的表單。根據元素的顏色驗證表單是否是一種好的做法?
基本上在所有輸入字段中,我有一個函數來測試輸入內容是否正確,由'onchange'事件觸發。如果內容爲「無效」,該功能會將該輸入字段的背景設置爲紅色。
function looseColorQty(t)
{
var n = t.value;
if(isNaN(n) == true || n < 0){
t.style.backgroundColor="red";
} else {
t.style.backgroundColor="";
}
}
然後,當用戶點擊「提交」按鈕,還有另外一個劇本,如果這種形式可以提交基於任何輸入字段是「紅色」來檢查。
var canNotSubmit = 0;
function checkError(){
var fieldsToCheck = document.getElementsByTagName("input");
var fieldsQty = fieldsToCheck.length;
for(var i=0; i<fieldsQty; i++){
var checkTarget = fieldsToCheck[i].style.backgroundColor;
if(checkTarget == "red"){
document.getElementById("tips").className = "tipError";
document.getElementById("tips").innerHTML = "Please correct all RED fields before you submit.";
canNotSubmit = 1;
return;
}
}
}
它實際上工作,但我只是有一種奇怪的感覺,這種驗證是基於顏色。我想知道是否有這樣的缺點。
這不是最佳做法,因爲紅色可能意味着任何事情。最好讓'checkError()'做兩件事:1.它應該將元素着色爲紅色,2.在循環中它應該跟蹤'numErrors'(每次發現錯誤時計數一個新變量)。那麼你應該使用'numErrors'來確定表單是否有效。這是一個微妙的差異,但將使維護應用程序更容易,後來 –
只要有服務器端驗證是好的,我相信。只是想確保您不會收到任何錯誤的否定信息,並且用戶無法使用表單 – Luke