Попробуйте установить пользовательское сообщение проверки с помощью jQuery Remote

У меня есть форма a со следующей настройкой проверки:

$('#form').validate({
            onfocusout: false,
            onkeyup: false,
            onclick: false,
            success: function (){
                $('#username').addClass('input-validation-confirmation');
            }
        });
$('#username').rules("add", {
        onfocusout: false,
        onkeyup: false,
        required: true,
        email: true,                    
        remote: {
            url: function,
            type: 'GET',
            dataType: 'json',
            traditional: true,
            data: {
                username: function () {
                    return $('#username').val();
                }
            },
            dataFilter: function (responseString) {
                var response = jQuery.parseJSON(responseString);
                currentMessage = response.Message;
                if (response.State == 0) {
                    currentMessage = currentMessage + 0;
                                return false;
                }
                return 'true';
            },
            beforeSend: function (response) {
                showLoadingIndicator($('#username'));
            },
            complete: function () {
                hideLoadingIndicator($('#username'));
            }
        }
});

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

моя проблема заключается в том, что метод успеха моего правила запускается до завершения удаленной проверки. Я попытался установить сообщение несколькими способами, но параметр custom messages, похоже, не вызывается при успешном выполнении проверки.

кто-нибудь знает о других методах использования поля ошибки проверки как для сообщений об успехе, так и для сообщений об ошибках при использовании сочетания правил проверки удаленных и шаблонов?

Edit:

теперь я понимаю, что ожидал успешного события в неподходящее время. Мне нужно событие, которое запускается после завершения проверки (не отправлено). Есть ли такое событие?

3 ответов


ваш код...

$('#username').rules("add", {
    onfocusout: false,
    onkeyup: false,
    required: true,
    email: true,                    
    remote: { ... },
    messages: { ... },
    success: function (label) { ... }
});

проблема здесь в том, что onfocusout, onkeyup и success не "правила". Только отдельные "правила" и messages опция может быть размещена внутри .rules('add') метод.

$('#username').rules("add", {
    required: true,
    email: true,                    
    remote: { ... },
    messages: { 
        remote: "custom remote message"
    }
});

см. документацию для .rules() метод:http://jqueryvalidation.org/rules

onfocusout, onkeyup и success являются "параметры", которые идут только внутри .validate() метод, который только прикреплены к <form> элемент.

насколько" пользовательское " сообщение для remote: согласно docs, это сообщение об ошибке автоматически будет сообщение, возвращаемое от сервера... нет никакой специальной настройки.


изменить в комментарии и обновил ОП:

код:

$('#form').validate({
        onfocusout: false,
        onkeyup: false,
        onclick: false,
        success: function (){
            $('#username').addClass('input-validation-confirmation');
        }
});

вы заявили, " тем не менее, с обновленным кодом (см. выше) я никогда не вижу события успеха."

ты отключены все события в этой форме. Единственным событием, оставшимся для запуска проверки в этом поле, является нажатие кнопки Отправить. Именно!--45-->, когда вы ожидаете "увидеть"success выстрелить?

демо: http://jsfiddle.net/xMhvT/

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


редактировать на основе другого обновления OP:

success не является "событием". "Событие" - это click, blur, keyup, etc. (onkeyup, onfocusout и onclick параметры управления событиями для этого плагина)

success - это "функция обратного вызова". "Функция обратного вызова" - это то, что происходит на событие.

• Если вам нужна "функция обратного вызова", которая срабатывает каждый раз, когда поле проходит проверку, вы можете использовать success.

• Если вам нужна "функция обратного вызова", которая срабатывает, когда форма проходит проверку, вы можете использовать submitHandler. Однако это также происходит, когда форма представляется.

• если вы хотите "протестировать" вся форма или одно поле, чтобы узнать, действительна ли она без отправки формы, вы можете использовать .valid() "метод".

$('#username').valid();  // for one field

// or

$('#form').valid();  // for the whole form

// you can also...

if ($('#form').valid()) {
   //do something if form is valid
}

этот метод запустит тест (покажет сообщение) и вернет логическое значение.

демо: http://jsfiddle.net/xMhvT/1/

см.:http://jqueryvalidation.org/valid/


использовать remote, dataFilter и messages параметры так:

var message = 'Default error message';

$('form').validate({
    rules: {
        element1: {
            remote: {
                url: '/check',
                type: 'post',
                cache: false,
                dataType: 'json',
                data: {
                    element2: function() {
                        return $('.element2').val();
                    }
                },
                dataFilter: function(response) {
                    response = $.parseJSON(response);

                    if (response.status === 'success') return true;
                    else {
                        message = response.error.message;
                        return false;
                    }
                }
            }
        }
    },
    messages: {
        element1: {
            remote: function(){ return message; }
        }
    }
});

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

в вашем PHP просто нужно добавить следующее

if($rows_matched==1){
          echo (json_encode(false));
        }
        else{
          echo (json_encode(true));
        }

и в ваших JS код писать followiing: $(function () {

$('#product_add').validate({
rules:{
  product_sku:{
    remote:{
      url:'check.php',
      type:'POST'
    }
  }
},
messages:{
  product_sku:{
    remote:'already in database'
  }
}
});

});