Проверка формы jQuery не удается продолжить проверку

#jquery #jquery-validate

#jquery #jquery-проверка

Вопрос:

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

Например, если я введу abc@abc.com для адреса электронной почты, и он проверяет, затем устанавливает его как действительный. Но если я вернусь и введу электронное письмо, которое существует и должно возвращать false (и возвращает false), статус не изменится. Это также относится к методу equalTo.

Это действительно расстраивает :/

Вот JS [сокращенные имена]:

 $('#register').validate({
    rules: {
        scq: {
            required: true
        },
        email: {
            required: true,
            remote: {
                url: 'ajax.php',
                type: 'post',
                async: false,
                data: {
                    type: 'email',
                    email: function() {
                        return $('#email').val()
                    }
                }
            }
        },
        email2: {
            equalTo: '#email'
        },
        pass: {
            required: true
        },
        pass2: {
            equalTo: '#pass'
        }
    },
    success: function(label) {
        label.html('amp;nbsp;').addClass('success');
    }
});
 

PHP для ajax.php:

 if($row['id']) $success = true;
else $success = false;

echo json_encode($success);
 

Ответ №1:

…если я вернусь и введу электронное письмо, которое существует и должно возвращать false (и возвращает false), статус не изменится.

Это потому, что вы вручную добавляете класс, вызываемый .success внутри success: обработчика. Проблема в том, что ничто не удаляет этот класс, если или когда проверка впоследствии завершится неудачей.

Вы могли бы просто позволить плагину автоматически применять / удалять соответствующий класс для достижения успеха. (Он уже делает это для класса ошибок.) Добавьте validClass: обработчик…

 $('#register').validate({
    validClass: 'success',
    rules: { // etc. etc.
 

А затем удалить .addClass('success') из вашего success: обработчика.


Я не совсем уверен, куда $success вписывается ваша переменная или является ли это частью проблемы.

Однако, чтобы просто проверить, прошла ли проверка или не удалась, вы просто проверяете, является ли .valid() это true или false …

 if ($('#register').valid() == true) { alert('passed validation'); };

if ($('#register').valid() == false) { alert('failed validation'); };
 

Я надеюсь, что это поможет.

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

1. Это сработало, и я действительно понял это до того, как увидел ваш комментарий. Увеличьте это, чтобы люди могли увидеть это в будущем!