如何将字符串从函数返回到另一个函数?

时间:2015-02-25 09:18:33

标签: javascript

我已经制作了一个登录表单,用于检查用户名和密码是否有效。

一切都很好,直到我按下登录。

按下登录按钮后,表示用户名和密码错误,但不是。

我该如何解决这个问题?我认为它是returnuserCheck()函数中的pwdCheck()

这是我的表格

<form name="loginForm" id="loginForm">
 <input type="text" id="user" name="user" onfocus="userFocus()" onblur="userBlur()">
<span id="userWarn" class="warnSpan">Username is required.</span>
 <input type="text" id="pwd" name="pwd" onfocus="pwdFocus()" onblur="pwdBlur()">
<span id="pwdWarn" class="warnSpan">Username is required.</span>
</form>

这是javascript:

var pwdElem = document.getElementById("pwd");
var pwdVal = document.getElementById("pwd").value;
var pwdWarn = document.getElementById("pwdWarn");
var pwdLen = pwdVal.length;
var pwdCheck = pwdCheck();
var userElem = document.getElementById("user");
var userVal = document.getElementById("user").value;
var userWarn = document.getElementById("userWarn");
var userLen = userVal.length;
var userCheck = userCheck();

function userFocus()
{
 userElem.style.backgroundColor = "#ccffff"; 
 userElem.style.border = "1px inset #00ffff";
 userElem.style.color = "#00ffff";
}

function userBlur()
{
 var userLenx = document.getElementById("user").value.length;

 if (userLenx != 0)
 {
  userOk();
 }
 else
 {
  userError();
 }
}

function pwdFocus() 
{
 pwdElem.style.backgroundColor = "#ccffff"; 
 pwdElem.style.border = "1px inset #00ffff";
 pwdElem.style.color = "#00ffff";
}

function pwdBlur()
{
 var pwdLenx = document.getElementById("pwd").value.length;

 if (pwdLenx >= 8)
 {
  pwdOk();
 }
 else
 {
  pwdError();
 }
}

function userCheck()
{
 var userLenx = document.getElementById("user").value.length;

 if (userLenx != 0)
 {
  return "ok";
 }
 else
 {
  return "error";
 }
}

function pwdCheck() 
{
 var pwdLenx = document.getElementById("pwd").value.length;

 if (pwdLen >= 8)
 {
  return "ok";
 }
 else
 {
  return "error";
 }
}

function userError()
{
 userElem.style.backgroundColor = "#ffcccc"; 
 userElem.style.border = "1px inset #ff0000";
 userElem.style.color = "#ff0000";
 userWarn.style.visibility = "visible";
}

function pwdError() 
{
 pwdElem.style.backgroundColor = "#ffcccc"; 
 pwdElem.style.border = "1px inset #ff0000";
 pwdElem.style.color = "#ff0000";
 pwdWarn.style.visibility = "visible";
}

function userOk()
{
 userElem.style.backgroundColor = "#ddffdd"; 
 userElem.style.border = "1px outset #00bb00";
 userElem.style.color = "#00bb00";
 userWarn.style.visibility = "hidden";
}

function pwdOk()
{
 pwdElem.style.backgroundColor = "#ddffdd"; 
 pwdElem.style.border = "1px outset #00bb00";
 pwdElem.style.color = "#00bb00";
 pwdWarn.style.visibility = "hidden";
}

function errorForm()
{
 if (userCheck=="error"&&pwdCheck=="error")
 {
  userError();
  pwdError();
 }
 else if (userCheck=="error"&&pwdCheck=="ok")
 {
  userError();
 }
 else if (userCheck=="ok"&&pwdCheck=="error")
 {
  pwdError();
 }
 else
 {
  alert("Sorry, an error occured.\n\nPlease refresh page and try again.");
 }
}

function loginSubmit()
{
 if (userCheck=="ok"&&pwdCheck=="ok")
 {
  userOk();
  pwdOk();
  loginForm.submit();
 }
 else
 {
  errorForm();
 }
}

以下是Jsbin

请帮助,我是编码的新手!

4 个答案:

答案 0 :(得分:1)

您的代码问题似乎在函数loginSubmit()中。它应如下所示:

function loginSubmit()
{
 if (userCheck()=="ok"&&pwdCheck()=="ok") // <--change here
 {
  userOk();
  pwdOk();
  loginForm.submit();
 }
 else
 {
  errorForm();
 }
}

您加载的两个变量(userCheckpwdCheck)会在页面加载后立即初始化。这意味着它们将表示页面加载时登录和密码字段的状态。由于页面加载时这些字段为空,loginSubmit()函数将始终显示错误。希望这会有所帮助。

答案 1 :(得分:0)

您正在从该函数返回一个字符串,但您没有将它用于任何事情......

简短的例子

function getString() {
    return "A string";
}

// I don't even store the string...
getString();

所以要修复它,请使用返回的字符串

// Store it
var example = getString();

// Use it
alert(example);

答案 2 :(得分:0)

下面的代码将执行您正在尝试的验证

function validate()
{
    if(trim(document.frmLogin.sUserName.value)=="")
    {
      alert("Username is required.");
      document.frmLogin.sUserName.focus();
      return false;
    }
    else if(trim(document.frmLogin.sPwd.value)=="")
    {
      alert("Please Enter a Password");
      document.frmLogin.sPwd.focus();
      return false;
    }
}

答案 3 :(得分:0)

您似乎对尝试调用userCheck,pwdCheck等的方式有疑问。

您缺少括号,这意味着您正在将函数本身(即不是调用函数的结果)与字符串进行比较。

一旦你添加了括号

,你的比较应该是这样的
    if (userCheck()=="error"&&pwdCheck()=="error")