Почему моя проверка Javascript не работает? - PullRequest
1 голос
/ 07 июня 2010
<script type='text/javascript'>
function formValidator(){
// Make quick references to our fields
var username = document.getElementByName('username');
var password = document.getElementByName('password');
var email = document.getElementByName('email');

// Check each input in the order that it appears in the form!
    if(isAlphanumeric(username, "Please only use letters and numbers for you username.")){
        if(lengthRestriction(username, 8, 12)){
            if(lengthRestriction(password, 6, 15)){
                if(emailValidator(email, "Please enter a valid email address")){
                            return true;
                }
            }
        }
    }


return false;
}


function isAlphanumeric(elem, helperMsg){
var alphaExp = /^[0-9a-zA-Z]+$/;
if(elem.value.match(alphaExp)){
    return true;
}else{
    alert(helperMsg);
    elem.focus();
    return false;
}
}

function lengthRestriction(elem, min, max){
var uInput = elem.value;
if(uInput.length >= min && uInput.length <= max){
    return true;
}else{
    alert("Please enter between " +min+ " and " +max+ " characters");
    elem.focus();
    return false;
}
}

function emailValidator(elem, helperMsg){
var emailExp = /^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/;
if(elem.value.match(emailExp)){
    return true;
}else{
    alert(helperMsg);
    elem.focus();
    return false;
}
}

Мой сценарий не работает, хотя в текстовых полях имени пользователя, пароля и адреса электронной почты определен атрибут имени. Спасибо:).

Ответы [ 4 ]

2 голосов
/ 07 июня 2010

getElementByName не является допустимым методом для объекта document. Вы хотите getElement<em><b>s</b></em>ByName, который будет возвращать коллекцию элементов с указанным атрибутом name, или getElementById(), который будет возвращать единственный элемент с указанным атрибутом id.

// get the first element with name="username"
var username = document.getElementsByName('username')[0];

// get the first element with name="password"
var password = document.getElementsByName('password')[0];

// get the first element with name="email"
var email = document.getElementsByName('email')[0];
2 голосов
/ 07 июня 2010

Нет метода DOM "getElementByName", вы можете рассмотреть возможность использования getElementById или getElementsByName

0 голосов
/ 07 июня 2010

Метод называется getElementsByName (обратите внимание на отсутствующий s в вашем коде), и, как предполагает форма множественного числа, он возвращает массив со всеми соответствующими элементами. Если у вас есть только один элемент на имя, вы можете просто получить первый элемент из массива.

Теперь этот метод возвращает узел DOM. Если вы не знаете, что такое узел, просто подумайте о нем как о теге HTML. Вы не можете проверить тег, вам нужно извлечь его value атрибут.

Эти изменения будут отражены следующим образом (без проверки ошибок):

var username = document.getElementByName('username')[0].value;
var password = document.getElementsByName('password')[0].value;
var email = document.getElementsByName('email')[0].value;

Предлагает вам найти консоль JavaScript вашего браузера, чтобы вы могли получать уведомления об ошибках синтаксиса или, что еще лучше, использовать Firefox + Firebug.

0 голосов
/ 07 июня 2010

document.getElementByName ( 'имя пользователя'); вернуть массив или элементы с именем username ... поэтому добавьте индекс тоже ... т.е. document.getElementByName ('username') [0];

должно быть как:

var username = document.getElementByName('username')[0];
var password = document.getElementByName('password')[0];
var email = document.getElementByName('email')[0];
...