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

У меня есть собственный метод проверки, который будет проверять введенный почтовый индекс по моей базе данных принятых почтовых индексов. Я хотел бы сделать этот запрос асинхронным. Вот как это выглядит сейчас:

jQuery.validator.addMethod("validZip", function(value, element){
    var isValid = false;
    $.ajax({
        url: '/xpress/wp-admin/admin-ajax.php',
        data: {action:"test_checkZip", zip:value},
        type:"POST",
        async: false,
        success: function(result){
            if (result == 0){
                isValid = false;
            } else {
                isValid = true;
            }
        } 
    });
    return isValid;
}, '*');

Этот запрос требует, чтобы он был синхронным, поскольку он обновляет переменную, которая будет возвращена функцией обтекания. Если бы я делал это асинхронно, запрос был бы выполнен неблокирующим образом. Функция будет выполняться, выполнить запрос, однако она будет , а не ждать ответа для обновления логического значения, которое она возвратит. Он вернет ложное значение по умолчанию до завершения работы ajax и обновит его до true.

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

Мне нужно сделать что-то вроде этого:

jQuery.validator.addMethod("validZip", function(value, element){
    $.ajax({
        url: '/xpress/wp-admin/admin-ajax.php',
        data: {action:"test_checkZip", zip:value},
        type:"POST",
        async: true,
        success: function(result){
            if (result == 0){
                notifyZipControl(false)
            } else {
                notifyZipControl(true)
            }
        } 
    });
}, '*');

function notifyZipControl(isValid){
    if (isValid){
        // update the validator so the control becomes VALID
    } else {
        // update the validator so the control becomes INVALID
    }
}

Достижима ли эта идея?

1 Ответ

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

Это определенно возможно с remote правилом :

$("form").validate({
    rules: {
        zip: {
            remote: {
                url: "/xpress/wp-admin/admin-ajax.php",
                data: {
                    /* supply data besides the field value here: */
                    action: "test_checkZip"
                }
            }
        }
    }
});

За кулисами проверка выполняется только с помощью вызова $.ajax, поэтому вы должны иметь возможность предоставитьКакая бы гибкость вам ни была нужна.

Вот (плохой) пример, который просто проверяет, является ли почтовый индекс длиной 5 символов (на самом деле не имеет смысла работать с сервером, но, надеюсь, это даст вам хороший стартточка): http://jsfiddle.net/HYLS4/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...