Ошибка: Javascript всегда возвращает истину - PullRequest
0 голосов
/ 08 июля 2011

Я добавляю этот сценарий в файл 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 ]

3 голосов
/ 08 июля 2011

Помимо рекомендаций по рефакторингу, проще всего было бы использовать Firebug и отлаживать то, что делает неправильно. Это избавит вас от многих головных болей

3 голосов
/ 08 июля 2011

изменение document.getElementById('password').value.length == 0

до

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

В JavaScript

Ниже Все вернет истину

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

Решение

Ниже All вернется false

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

оператор "==" и "! =" попытается привести к двум значениям в один и тот же тип перед выполнением сравнения. 1031 *

оператор "===" и "! ==" (также известный как операторы идентификации ) проверяют тип и значения во время сравнение

1 голос
/ 08 июля 2011

То, что сказано выше, верно, остальное соответствовало только последнему if.

Также обратите внимание, что == - это не то же самое, что ===.

Кроме того, может быть лучше иметь только один оператор return в вашей функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...