JQuery удаленная проверка работает только на 2-й клик - PullRequest
0 голосов
/ 10 мая 2011

Я пытаюсь настроить удаленную проверку с помощью плагина jQuery validation 1.8.0 (и JQuery 1.5.2).

Работает нормально для «required» и «maxlength», но для удаленной проверкиработает ТОЛЬКО после 2-го щелчка (проверки) или, если были запущены какие-либо другие ошибки ранее.

Проверка выполняется правильно, и отображается сообщение об ошибке, но в первый раз проверка возвращает значение true (дажеесли отображается ошибка).Это проблема, поскольку форма будет отправлена ​​с ошибкой.

Вот мой код (упрощенно):

<script type="text/javascript">
    $(function() {
         $( "#check" ).click(function(){
            var valid = $("#myForm").validate(
                 {rules: {
                       groupName:{
                            required:true,
                            maxlength:40,
                            remote: {
                                url: 'ajaxCheck.php', // returns always a dummy string: "Simulate an error message" (JSON encoded)
                                type: "post",
                                data: {
                                    groupName: function() {
                                            return $("#groupName").val()
                                    }
                                }
                            }
                        }

                    }
                }
            ).form();
            alert(valid); // Returns true at the first call, and then false
        });
    });
</script>

<form id="myForm" action="">
   <label for="groupName">Group name</label>
   <input type="text" maxlength="40" size="45" value="my test" id="groupName" name="groupName">
</form>
<input type="button" value="Check form"   id="check" >

Файл ajaxCheck.php содержит:

require_once ('Zend/Json/Encoder.php');
echo Zend_Json_Encoder::encode("Simulate an error message");

Кажется, что JSON-ответ правильно закодирован (проверено с помощью Firebug).

Есть идеи, что я делаю неправильно?

Я пробовал также jQuery 1.6, но у меня были другие проблемы в IE8.

1 Ответ

0 голосов
/ 10 мая 2011

Вы не ожидаете проверки перед использованием возвращаемого значения.Причина в том, что проверка требует ajax-запроса, а вы его не ждете.Правильный способ сделать это - включить любой код, который вы хотите запустить после проверки, в callback .В плагине проверки есть invalidHandler, который вызывается при сбое проверки.Вы используете его, добавляя его к объекту параметров, который вы передаете validate() следующим образом:

$(function() {
         $( "#check" ).click(function(){
            var valid = $("#myForm").validate(
                 {rules: {
                       groupName:{
                            required:true,
                            maxlength:40,
                            remote: {
                                url: 'ajaxCheck.php', // returns always a dummy string: "Simulate an error message" (JSON encoded)
                                type: "post",
                                data: {
                                    groupName: function() {
                                            return $("#groupName").val()
                                    }
                                }
                            }
                        }
                    },
                    invalidHandler: function(form, validator){
                            alert('invalid input'); //note this is called ONLY IF validation fails
                    }
                }
            ).form();
        });
   });

Плагин проверки имеет несколько обратных вызовов, которые вызываются на основе результатов проверки. Взгляните на них здесь (нажмите «Опции» и найдите функции, которые являются «обратными вызовами».)

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