jQuery Validator - пользовательский метод не скрывает ошибку при действии - PullRequest
3 голосов
/ 06 июля 2011

У меня есть собственный валидатор, проверяющий значение по базе данных допустимых значений с помощью ajax-запроса.Сначала я подумал, что оно не скрывает сообщение об ошибке, потому что запрос выполняется асинхронно, поэтому, возможно, он не сможет вовремя вернуть true или false, чтобы валидатор распознал это.

Я отключил асинхронностьи сообщение об ошибке все еще остается показанным.Как я могу заставить это уйти?

Через ведение журнала консоли возвращает true, но сообщение об ошибке все еще остается.Я пытался явно скрыть сообщение, но валидатор все еще принимает ложь и не может отправить.

jQuery.validator.addMethod("validZip", function(value, element){
    var _id = $(element).attr("id");
    $.ajax({
        url: '/xpress/wp-admin/admin-ajax.php',
        data: {action:"test_checkZip", zip:value},
        type:"POST",
        asyc: false,
        success: function(response){
            if (response== 0){
                return false;
            } else {
                //$("label[for="+_id+"][class=error]").hide();
                return true;
            }
        } 
    });
}, '*');

Ответы [ 4 ]

2 голосов
/ 06 июля 2011

Как отметил Никола, в вашем обратном вызове есть опечатка.Кроме того, это функция обратного вызова, которая возвращает истину / ложь, поэтому фактически ваша функция validZip по-прежнему возвращает «неопределенное».

Попробуйте это:

jQuery.validator.addMethod("validZip", function(value, element){
    var _id = $(element).attr("id");
    var isValid = false;
    $.ajax({
        url: '/xpress/wp-admin/admin-ajax.php',
        data: {action:"test_checkZip", zip:value},
        type:"POST",
        asyc: false,
        success: function(response){
            isValid = response!= 0;
        } 
    });
    return isValid;
}, '*');
1 голос
/ 06 июля 2011

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

jQuery.validator.addMethod("validZip", function(value, element){
    var _id = $(element).attr("id");
    var return_value;
    $.ajax({
        url: '/xpress/wp-admin/admin-ajax.php',
        data: {action:"test_checkZip", zip:value},
        type:"POST",
        async: false,
        success: function(response){
            if (result == 0){
                return_value = false;
            } else {
                //$("label[for="+_id+"][class=error]").hide();
                return_value = true;
            }
        }
        return return_value; //HERE you have to return
    });
}, '*');

Проблема в том, что вы возвращали значения внутри вложенной функции, а не функции валидатора.

Надеюсь, это поможет.Приветствия

1 голос
/ 06 июля 2011

Может быть потому, что у вас есть:

asyc: false,

вместо:

async: false,
1 голос
/ 06 июля 2011

Ну, я думаю, что вы проверяете по result разве вы не должны проверять по response?

    success: function(response){
        if (response == false){
            return false;
        } else {
            //$("label[for="+_id+"][class=error]").hide();
            return true;
        }
    } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...