2011-10-14 13 views
16

Wykonuję sprawdzanie formularza po stronie klienta, aby sprawdzić, czy hasła pasują do siebie. Ale funkcja sprawdzania poprawności zawsze zwraca wartość undefined.Zwracanie wartości boolowskiej w funkcji 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; 
} 

Należy pamiętać, że validatePassword jest wywoływana z funkcji składowej obiektu 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

Ta funkcja nigdy nie zwróci 'niezdefiniowanych'. Zdefiniuj * "jest wywoływana z funkcji składowej obiektu Form." * –

+0

po prostu naciśnij CTRL + SHIFT + J - sprawdź, czy błąd Jeśli tak, opublikuj tutaj, Jeśli nie, otwórz debugger i uruchom go. –

+0

@AnilShanbhag Nie zwraca żadnego błędu. Otworzyłem debuggera, a kiedy przejdę przez ten kod, widzę, że wynik jest ustawiony jako "niezdefiniowany". – tryurbest

Odpowiedz

10

Można by uprościć to dużo:

  • Sprawdź, czy nie jest pusty
  • Sprawdź, czy są one równe

Spowoduje to, co zawsze zwraca a boolean. Twoja funkcja również powinna zawsze zwraca wartość logiczną, ale widać, że robi się trochę lepiej, jeśli uprościć kod:

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 To nadal zwraca 'undedined' .. Jestem robienie czegoś bizzare – tryurbest

+0

+1 dla jednego liniowca –

+0

@tryurbest: Czy dostaję jakieś błędy? Ta funkcja * zawsze * zwraca, a to, co zwraca, jest wartością logiczną ... A w twoim kodzie "this.validation_fn" powinno być fałszywe. Jaka jest wartość 'this.validation_fn'? – pimvdb

2

Można owinąć wartości zwracanej w funkcji logicznej

Boolean([return value]) 

That” Upewnię się, że wszystkie wartości Falseya są fałszywe, a stwierdzenia prawdziwości są prawdziwe.

Powiązane problemy