2010-06-07 3 views
1
<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; 
} 
} 

Почему моя проверка Javascript не работает?

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

+0

«Не работает» - не очень полезное описание проблемы. Попробуйте добавить некоторую информацию о том, где это происходит, и какие сообщения вы видите при запуске скрипта. –

+0

Но я не получаю никаких сообщений об ошибках, и я подробно описал проблему. Валидация JavaScript не проверяется. Не работает? Что было бы лучшим титулом? – Sam

+0

Возможно, что-то вроде: «Моя функция проверки JavaScript не предотвращает передачу недопустимых данных», хотя проблема, скорее всего, «Моя функция проверки JavaScript запускает синтаксические ошибки» ;-) Добро пожаловать в StackOverflow. –

ответ

2

getElementByName не является допустимым методом для document объекта. Вы хотите getElementsByName, который вернет коллекцию элементов с указанным атрибутом 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]; 
+0

Хорошо. Можно использовать несколько классов на одном классе E.G. class = "contact-input contact-left", правильно? – Sam

+0

@Sam: да.Фактически, это единственный способ применить несколько классов к одному элементу. –

0

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

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

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

Я изменил свой код на .. \t var username = document.getElementByName ('username') [0]; \t var password = document.getElementByName ('password') [0]; \t var email = document.getElementByName ('email') [0]; Это право? – Sam

2

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

0

Метод называется 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.

Смежные вопросы