2012-07-01 82 views
0

我正在通过一个教程现在在表单验证,我想帮助为什么这个函数总是返回if条件。javascript if-else loop not getting else

<html> 
<head> 
</head> 
<body> 
    <form id="form" action="#" method="post"> 
     <fieldset> 
      <p> 
       First Name: 
       <input type="text" id="txt" /> 
      </p> 
      <p> <input type="submit" value="submit" onclick="validate()" /> </p> 
     </fieldset> 
    </form> 
    <script type="text/javascript"> 
     function validate() 
      { 
      var userName = document.getElementById("txt").value; 
      if (userName.length == 0) 
       { 
       alert("FINISH THAT UP"); 
       return false; 
       } 
      else 
       { 
       alert("thanks, " + UserName); 
       } 
      } 
    </script> 
</body> 

+0

是价值并不总是空的? – JohnP

+0

http://javascript.crockford.com/code.html – NimChimpsky

+0

它不应该是如果用户输入的东西。 –

回答

4

它到达else一部分,当文本框不为空,但随后它与这样的形式正在悄悄提交错误崩溃。

JavaScript区分大小写 - UserNameuserName不同,因此未定义。

更改为:

alert("thanks, " + userName); 

为了避免这样的问题,你可以用try..catch这样整个包住块:

function validate() 
{ 
    try 
    { 
     var userName = document.getElementById("txt").value; 
     if (userName.length == 0) 
     { 
      alert("FINISH THAT UP"); 
      return false; 
     } 
     else 
     { 
      alert("thanks, " + UserName); 
     } 
    } catch (err) { 
     alert("general error while validating: " + err.message); 
     return false; 
    } 
} 

有了这个地方,你会看到“用户名是未定义” 。

Live test case

此外,在一个侧面说明 - 与您现有的代码,甚至虽然你返回false形式仍然可以提交空值 - 这是因为您需要取消甚至提出:

<input type="submit" value="submit" onclick="return validate()" /> 

你忘了onclick本身的return关键字。

+0

感谢您的解释! –

+0

干杯@T骨看到我的编辑以及。 –

+0

哇,真的很彻底。太感谢了。 –

3

JavaScript是区分大小写的语言。所以在else语句中更正userName变量名称如下。

else { 
     alert("thanks, " + userName); 
    } 
+0

非常感谢!我感到困惑,至于为什么会影响警报,至少应该“谢谢”出现? –

+0

@ T-Bone - 尝试访问未定义的变量是JavaScript中的运行时错误,引发异常并停止执行脚本。 – jfriend00

0

你可以试试吗?我认为这可以工作。

function validate() 
{ 
    try 
    { 
     var userName = document.getElementById("txt").value; 
     if (userName) 
     { 
      alert("FINISH THAT UP"); 
      return false; 
     } 
     else 
     { 
      alert("thanks, " + UserName); 
     } 
    } catch (err) { 
     alert("general error while validating: " + err.description); 
    } 
} 
+0

这只是纯粹的机会,你使用了我使用的确切的变量名,并且做了同样的错误,就像我自己做的那样修复过吗? –

+0

这个修复了吗?我刚刚使用了确切的变量,但我没有尝试过代码本身,因为它逻辑上它的工作原理,但我不知道如果它真的。 –

0

这个怎么

function validate(){ 
    $("#form").submit(function() { 

    if($("#txt").val()==""){ 
     alert("FINISH THAT UP"); 
     return false; 
    } 
    if($("#txt").val()!=""){ 
     var un = $("#txt").val(); 
     alert("thanks, " + un); 
     return true; 
    } 
    }); 

}