當我決定使用經典javascript構建普通的Web表單驗證時,出現奇怪的錯誤。有幾個用於輸入文本字段的「onblur」處理程序和一個「表單提交」處理程序。JavaScript是否在布爾表達式中使用優化?
當我使用他們喜歡的是:「passwordCheck」如果loginCheck失敗從來沒有所謂:
function loginCheck() {
... return true of false
}
function passwordCheck() {
...
}
function formValidation() {
return loginCheck() && passwordCheck();
}
,因爲我希望它不工作!
最後,我有解決辦法
function formValidation() {
ok = loginCheck();
ok &= passwordCheck();
return ok;
}
現在執行密碼檢查。但是,當我選擇:
function formValidation() {
ok = loginCheck();
ok = ok && passwordCheck();
return ok;
}
passwordCheck永遠不會再次調用如果loginCheck失敗。
此外:loginCheck & passwordCheck返回布爾值,但& =運算符將其轉換爲「0」或「1」。 「0」對我的onsubmit="return checkForm"
處理程序不起作用。我不得不將我& =結果再次布爾:
function formValidation() {
ok = loginCheck();
ok &= passwordCheck();
return ok != 0;
}
這是JavaScript引擎一種正常的行爲?
'&'是按位與,並將始終返回一個數字。 '&&'是邏輯與,並且將返回表達式的值,它決定了整體結果。將任何值轉換爲布爾值的快捷方式是使用雙重否定'!!'。 –
可以以某種方式改變可怕的標題?我想不出那些清晰而又有吸引力的東西。 – Lekensteyn
如果在登錄檢查失敗後需要進行密碼檢查,則需要進行一些重構。 – hyperslug