2011-10-14 149 views
16

我正在執行客戶端表單驗證以檢查密碼是否匹配。但驗證函數總是返回undefined在JavaScript函數中返回布爾值

function validatePassword(errorMessage) 
{ 
    var password = document.getElementById("password"); 
    var confirm_password = document.getElementById("password_confirm"); 

    if(password.value) 
    { 
     // Check if confirm_password matches 
     if(password.value != confirm_password.value) 
     { 
     return false; 
     } 
    } 
    else 
    { 
     // If password is empty but confirm password is not 
     if(confirm_password.value) 
     { 
     return false; 
     } 
    } 
    return true; 
} 

請注意validatePassword是從Form對象的成員函數調用的。

function Form(validation_fn) 
{ 
    // Do other stuff 
    this.submit_btn = document.getElementById("submit"); 
    this.validation_fn = validation_fn; 
} 

Form.prototype.submit = funciton() 
{ 
    var result; 
    if(this.validation_fn) 
    { 
     result = this.validation_fn(); 
    } 

    //result is always undefined 
    if(result) 
    { 
     //do other stuff 
    } 
} 
+0

這個函數永遠不會返回'undefined'。請定義*「由Form對象的成員函數調用。」* –

+0

只需點擊CTRL + SHIFT + J - 檢查是否錯誤如果是在這裏發佈,如果沒有,則打開調試器並運行它。 –

+0

@AnilShanbhag不返回任何錯誤。我確實打開了調試器,當我逐步完成代碼時,是在我意識到結果被設置爲「未定義」的情況下。 – tryurbest

回答

10

你可以這樣簡化了很多:

  • 檢查一個人是否不爲空
  • 檢查它們是否相等

這將導致這一點,這將永遠回報一個布爾值。你的功能也應該總是返回一個布爾值,但你可以看到,如果您簡化代碼,它確實好一點:

function validatePassword() 
{ 
    var password = document.getElementById("password"); 
    var confirm_password = document.getElementById("password_confirm"); 

    return password.value !== "" && password.value === confirm_password.value; 
     //  not empty  and    equal 
} 
+0

@primvdb仍然返回'undedined' ..我是做點什麼bizzare – tryurbest

+0

+1單線程 –

+0

@tryurbest:你是​​否可能遇到任何錯誤?這個函數總是返回,它返回的是一個布爾值......並且在你的代碼中,this.validation_fn應該是false。 'this.validation_fn'的價值是什麼? – pimvdb

2

你可以在布爾函數包裝您的返回值

Boolean([return value]) 

那我們將確保所有錯誤的值都是錯誤的,真實性陳述是真實的。