时间:2011-10-14 15:49:06

标签: javascript

我正在进行客户端表单验证以检查密码是否匹配。但验证函数始终返回undefined

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
   }
}

4 个答案:

答案 0 :(得分:12)

答案 1 :(得分:5)

您可以将返回值包装在布尔函数

Boolean([return value])

确保所有虚假值都是假的,真实的陈述是真的。

答案 2 :(得分:2)

当然可以,但很流行。现在是2020年,这些答案都没有解决无法读取的代码的问题。 @pimvdb的答案占用更少的行,但遵循起来也相当复杂。为了简化调试和提高可读性,我应该建议将OP的代码重构为这样的格式,并采用早期返回模式,因为这可能是您不确定为什么不确定的主要原因:

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

   if (password.value.length === 0) {
      return false;
   }

   if (password.value !== confirm_password.value) {
      return false;
   }
  
   return true;
}

答案 3 :(得分:0)

在声明任何变量时不要忘记使用var / let。有关JS编译器行为的信息,请参见以下示例。

function  func(){
return true;
}

isBool = func();
console.log(typeof (isBool));   // output - string


let isBool = func();
console.log(typeof (isBool));   // output - boolean