错误:Javascript始终返回true

时间:2011-07-08 08:03:26

标签: javascript javascript-events

我在jsp文件中添加了这个脚本。

即使对于失败的情况(例如没有匹配表达式和外翻),此函数也始终返回true。

为什么会这样?怎么解决这个问题?

<script type="text/javascript">
function validate()
{
    document.getElementById("user").innerHTML="";
    document.getElementById("pass").innerHTML="";
    document.getElementById("mail").innerHTML="";
    document.getElementById("number").innerHTML="";

    var expression = /^[a-zA-Z_.0-9]+$/;
    var mailExp = /^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}+$/;
    var numberExp = /^[0-9]+$/;
    if(!document.getElementById('username').value.match(expression))
    {
        document.getElementById('username').focus();
        document.getElementById("user").innerHTML=" Enter valid user name";
        return false;
    }
    if(document.getElementById('password').value.length == 0)
    {
        document.getElementById('password').focus();
        document.getElementById("pass").innerHTML = "Fill Password field";
        document.getElementById("pass").style.visibility = "visible";
        return false;
    }
    if(document.getElementById('cnfpassword').value.length == 0)
    {
        document.getElementById('cnfpassword').focus();
        document.getElementById("pass").innerHTML = "Fill confirm Password field";
        document.getElementById("pass").style.visibility = "visible";
        return false;
    }
    if(document.getElementById('password').value != document.getElementById('cnfpassword').value)
    {
        document.getElementById('password').focus();
        document.getElementById("pass").innerHTML = "Password and confirm password Not match";
        document.getElementById("pass").style.visibility = "visible";
        return false;
    }
    if(!document.getElementById('emailid').value.match(expression))
    {
        document.getElementById('emailid').focus();
        document.getElementById("mail").innerHTML=" Enter valid E-mailID";
        document.getElementById("mail").style.visibility = "visible";
        return false;
    }
    if(!document.getElementById('number').value.match(numberExp))
    {
        document.getElementById('number').focus();
        document.getElementById("number").innerHTML=" Enter only numbers";
        document.getElementById("number").style.visibility = "visible";
        return false;
    }
    else
    {
        return true;
    }
 }

3 个答案:

答案 0 :(得分:3)

变化 document.getElementById('password').value.length == 0

document.getElementById('password').value.length === 0

在javascript中

全部将返回true

0==""      
0== "0"
false== "0"
null== undefined
0==' \t\r\n '

解决方案

全部将返回false

0===""      
0=== "0"
false=== "0"
null=== undefined
0===' \t\r\n '

“==”“!=”运算符会在比较之前尝试强制将两个值转换为相同的类型制成。

“===”“!==”运算符(也称为身份运算符)检查类型和值比较时间

答案 1 :(得分:3)

除了重构建议之外,最简单的方法是使用Firebug并调试出错的地方。它会为你节省很多麻烦

答案 2 :(得分:1)

上面所说的是正确的,其他只对应于最后一个if

另请注意,==与===不同。

此外,在您的函数中只有一个return语句可能会更好。