2016-02-10 3 views
0

Я новичок в Javascript, и я пытаюсь проверить свою форму, но по некоторым причинам мой код учитывает только первый вход.Javascript только подтверждает мой первый ввод

Если я пытаюсь вставить имя ввода 1 char, оно дает мне правильное поле предупреждения, но если я вставляю фамилию с 1 символом, это не показывает мне одно и то же окно предупреждения.

Я не вижу свою ошибку ... почему она обрабатывает только первый вход? Кто-нибудь может мне помочь?

HTML

<form action="registration" name="registrationForm" method="post" onsubmit="return formValidation();"> 
    <p> Nome <p> 
    <input type="text" class="registrationInput" name="nome" placeholder="Nome" required maxlength="45"/> 
    <p> Cognome </p> 
    <input type="text" class="registrationInput" name="cognome" placeholder="Cognome" required maxlength="45"/> 
</form> 

JAVASCRIPT

function formValidation(){ 

    var name = document.registrationForm.nome; 
    var surname = document.registrationForm.cognome; 

    if(validateName(name)){ 
     if(validateSurname(surname)) { 
     } 
    } 
    return false; 
} 

function validateName(name){ 
    if(name.value.length <= 3 || name.value.length >=45) { 
     window.alert("Il nome non è corretto. Deve essere lungo da un minimo di 4 a un massimo di 45 caratteri"); 
     name.focus(); 
     return false; 
    } 
    return true; 
} 

function validateSurname(surname) { 
    if(surname.value.length <= 3 || surname.value.length >=45) { 
     window.alert("Il cognome non è corretto. Deve essere lungo da un minimo di 4 a un massimo di 45 caratteri"); 
     surname.focus(); 
     return false; 
    } 
    return true; 
} 
+0

Потому что это только Подтверждает второй ящик, если первый пройдет ...!? Потому что вы вложили его в 'if' ...!? – deceze

+0

Он проверяет только первый ящик, чувак, даже если второй неправильный. Не грубитесь и не прочитайте вопрос. – Alex

+0

Как я уже сказал: если первый ошибочен, второй никогда не проверяется. Проверяет ли он второй, когда первый правильный (он должен)? – deceze

ответ

0

Проблема здесь

if(validateName(name)){ 
    if(validateSurname(surname)) { 
    } 
} 

Ошибка в том, что, если первый вызов функции validateName (имя) возвращает ложь, второй вызов будет проигнорирован. Возможно, вам нужно проверить разделенные входы.

if(validateName(name)){ 

} 

if(validateSurname(surname)) { 
} 

Update после читать комментарии

Легко как флаг, чтобы знать, что это вход, который не может

var flag = true; 

if(!(validateName(name) && flag)){ 
    flag = false; 
    alert("Input 1 fails"); 
} 


if(!(validateSurname(surname) && flag)){ 
    flag = false; 
    alert("Input 2 fails"); 
} 
+0

Да, но я хочу этого поведения. Если я вставляю неправильный ввод в форму, я хочу видеть предупреждение, которое показывает мне первую ошибку, которую я сделал. В вашем примере вместо этого, если я устанавливаю неправильные входы, я должен показывать разные предупреждения одновременно, один для всех моих ошибок. Это немного подчеркивает: D – Alex

+0

Почему бы не проверить их отдельно? Вы хотите отобразить первую ошибку для проверки ввода? –

+0

Нет, я хочу показать первую ошибку, когда я нажму «отправить». Здесь у нас есть две формы ввода: input1 и input2. вход 1: неправильный, вход 2: правильный -> отправить -> предупреждение (вход 1 неверен) вход 1: правильный, вход2: неверный -> отправить -> предупреждение (вход2 неверен) вход1: неверно, input2: неверно -> submit -> alert (input1 неверно) Прошу прощения за плохое форматирование :-( – Alex

-1

Функция formValidation() не возвращает ничего, если проверка в порядке.

Перед утверждением фамилии, если вам нужно вернуть значение true.

... 
if(validateName(name)){ 
    if(validateSurname(surname)) { 
     return true; // <-- YOU NEED TO ADD THIS 
    } 
} 
return false; 
... 

Надеется, что это поможет вам :)

+0

Спасибо, я был уверен, что уже попробовал ... но я этого не делаю.Это работает, спасибо за ваше время :-) – Alex

0
if(validateName(name)){ 
    if(validateSurname(surname)) 

Если и только если validateName возвращает true делают validateSurname бег. Если вы всегда безоговорочно хотите проверить оба, вы должны не гнездятся их условно:

var valName = validateName(name), 
    valSurname = validateName(surname); 

return valName && valSurname; 
0

Ваша попытка проверить поля вполне inneficient. Я рекомендую вам попробовать это:

function formValidation(){ 
     var nome = document.getElementsByName('nome')[0]; 
     var cognome = document.getElementsByName('cognome')[0]; 

     if(!validateInput(nome)){ 
      //input nome validation is false 
      alert("Il nome non è corretto. Deve essere lungo da un minimo di 4 a un massimo di 45 caratteri"); 
      nome.focus(); 
      return; 
     } 

     if(!validateInput(cognome)){ 
      //input cognome validation is false 
      alert("Il cognome non è corretto. Deve essere lungo da un minimo di 4 a un massimo di 45 caratteri"); 
      cognome.focus(); 
      return; 
     } 
    } 

    function validateInput(input){ 
     //input parameter MUST be a DOM Element 

     var input_name = input.getAttribute("name"); 

     //Validation of "nome" input 
     if(input_name == "nome"){ 

      //Minimum length is 4 and maximum length is 45 
      if(input.value.length > 3 && input.value.length < 46){ 
       return true; //This will break execution and return true 
      } 
     } 

     //Validation of "cognome" input 
     else if(input_name == "cognome"){ 

      //Minimum length is 4 and maximum length is 45 
      if(input.value.length > 3 && input.value.length < 46) { 
       return true; //This will break execution and return true 
      } 

      //This input validation is exactly the same as 
      //nome input validation, so you should ommit the 
      //code duplication and use the same validation for 
      //both fields. 
     } 

     //Add more field validations if needed... 
     //. . . 

     //If the input passed as a parameter doesn't pass the validation 
     //this function will return false. 
     return false; 
    } 

Я также настоятельно рекомендую использовать JQuery для проверки формы, так как это упрощает его много, сравнить себя:

function formValidation(){ 

    var passedvalidation = true; 

    //Iterate on all registration inputs 
    $(".registrationInput").each(function(){ 
     var input = $(this); //Get the input object 
     var input_name = $(input).attr("name"); //Get the input name 

     if(input_name == "nome"){ 
      //Validate "nome" input 
      //If validation is false show message, change input color, etc... 
      passedvalidation = false; 
     } 

     else if(input_name == "cognome"){ 
      //Validate "cognome" input 

      //If validation is false show message, change input color, etc... 
      passedvalidation = false; 
     } 
    }); 

    return passedvalidation; 
} 

//Call form validation function and that's all 
if(formValidation()){ 
    //send post to process the form 
} 
+0

. пример, чтобы лучше понять возвращаемые значения javascript-функций. Конечно, в моем коде я улучшу себя, и я увижу некоторую валидацию формы jQuery. Большое спасибо :) – Alex

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