Одно предложение else для нескольких предложений if — javascript

#javascript #forms #if-statement

#javascript #формы #if-оператор

Вопрос:

Во-первых: я новичок в JavaScript. Итак .. у меня есть базовая форма с полями password, repeat password, email и repeat email. Я хочу проверить, равен ли пароль повторному паролю. Если это не так, появится предупреждающее сообщение и страница перезагрузится. То же самое для электронной почты и повторной электронной почты. НО если пароль pass и repeat не равны, а электронная почта и повторное электронное письмо не равны, появляется первое предупреждающее сообщение, затем второе сообщение (на этот раз для электронной почты) появляется слишком быстро. Я хочу показывать только одно предупреждающее сообщение, когда оба поля не совпадают.

 <script type="text/javascript">

           function checkFields() {
            var pass= document.getElementById('password');
            var reppass= document.getElementById('reppass');

            var email= document.getElementById('email');
            var repemail= document.getElementById('repemail');

            if (pass.value != reppass.value) {
               alert('Passwords dont match');
               window.location.reload();
            }

            if (email.value != repemail.value) {
                alert('Emails dont match');
                window.location.reload();
            }                   

            else if (pass.value != reppass.value amp;amp; email.value != repemail.value) {
                alert('Both fields dont match');
                window.location.reload();
            }

        }   

  </script>
  

И форма:

 <form onSubmit="checkFields()">
<p><label>Password:</label> <input name="password" id="password" required="true" type="password" /></p>
<p><label>Repeat password:</label> <input name="reppass" id="reppass" required="true" type="password" /></p> 
<p><label>Email:</label> <input name="email" id="email" required="true" type="email" /></p>
<p><label>Repeat Email:</label> <input name="repemail" id="repemail" required="true" type="email" /></p>
<p><input type="submit" value="Send"></p> 
</form>
  

Ответ №1:

Вы можете просто вернуться из предложений if следующим образом:

 function checkFields() {
    var pass = document.getElementById('password');
    var reppass = document.getElementById('reppass');

    var email = document.getElementById('email');
    var repemail = document.getElementById('repemail');

    if (pass.value != reppass.value amp;amp; email.value != repemail.value) {
        alert('Both fields dont match');
        window.location.reload();
    }

    if (pass.value != reppass.value) {
        alert('Passwords dont match');
        window.location.reload();
        return;
    }

    if (email.value != repemail.value) {
        alert('Emails dont match');
        window.location.reload();
        return;
    }

}
  

Мне нравится этот стиль, потому что он предотвращает вложение предложений if. Недостатком является то, что у вас есть несколько точек возврата, которые могут сбивать с толку — это сильно зависит от длины функции.

Редактировать

Обновленный порядок блоков if

Комментарии:

1. Проблема с этим ответом заключается в том, что третий оператор if никогда не будет равен true, поскольку вы уже проверяете эти значения, а затем возвращаете.

2. Разве третье утверждение не должно быть первым? Таким образом, если он обнаружит, что оба не совпадают, он вернет это?

Ответ №2:

 if( condition1 ) {
}else if( condition2 ) {
}else{
    …
}
  

Я считаю, что это то, что вы хотите.

Ответ №3:

Одним из решений было бы разбить проверку на отдельные методы, а затем запустить вторую проверку только в том случае, если первая завершится успешно.

Вот пример:

 var FormValiditor = function() {
    var pass = document.getElementById('password');
    var reppass = document.getElementById('reppass');
    var email = document.getElementById('email');
    var repemail = document.getElementById('repemail');

    return {
        checkFields: function() {
            if(checkPassword()){
             return checkEmail();   
            }
            return false;
        },
        checkPassword: function() {
            if (pass.value != reppass.value) {
                alert("Password don't match");
                return false;
            }
            return true;
        },
        checkEmail: function() {
            if(email.value != repemail.value){
              alert("Emails do not match");
              return false  
            }
            return true
        }
    }
}();
  

Затем, если вы используете jQuery (что и должно быть!) вы можете запустить проверку при отправке формы.

$('form').submit(FormValidator.checkFields);

Ответ №4:

 if ...
else if ...
else if ...
...
else ...
  

Вот как это должно быть структурировано. У вас может быть столько else if s, сколько вам нравится.