2011-10-14 4 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 Не возвращает никаких ошибок. Я открыл отладчик, и когда я перехожу через код, это когда я понял, что результат устанавливается как 'undefined' – 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' должно быть ложным. Какова ценность 'this.validation_fn'? – pimvdb

2

Вы можете обернуть возвращаемое значение в булевой функции

Boolean([return value]) 

Вот ll гарантировать, что все значения ложности ложны, а истинные утверждения верны.

Смежные вопросы