Созонов Алексей

Веб-разработчик

JQuery Validation Plugin Remote Rule

09.08.2015

Пример содержимого файла validation.js

(function($) {
    $(document).ready(function(){

        $.validator.addMethod("regexp", function (value, element) {
            if($(".checkbox-item-1").is(":checked"))
                return this.optional(element) || /^[0-9]+$/.test(value);
            else
                return true;
        }, 'Разрешено вводить только числа.');

        $("form.settings-form").validate({
            rules: {
                id: {
                    // Добавляем зависимость от чекбокса, иначе required: true
                    required: function () {
                        return $(".checkbox-item-1").is(":checked");
                    },
                    regexp: true
                },
                captcha: {
                    required: function () {
                        return $(".checkbox-item-1").is(":checked");
                    },
                    remote: {
                        param: {
                            type: 'post',
                            url: '/ajax/validator',
                            complete: function(data){
                                if( data.responseJSON === true ) {
                                    $('input[name="captcha"]').parents('.has-feedback').removeClass("has-error");
                                }
                            }
                        },
                        depends: function() {
                            return $(".checkbox-item-1").is(":checked");
                        }
                    }
                }
            },
            messages: {
             captcha: {remote: "Ошибка!"}
            },

            // Изменяем вывод ошибки
            errorElement: "span",
            errorPlacement: function(error, element) {
                error.appendTo(element.parents('.has-feedback').find('.middle'));
            },
            highlight: function(element) {
                $(element).parents('.has-feedback').addClass("has-error");
            },
            unhighlight: function(element) {
                $(element).parents('.has-feedback').removeClass("has-error");
            }
        });

    });
})(jQuery);

Содержимое /ajax/validator

< ?php

if (!empty($_POST['captcha']))
{
    if($_POST['captcha'] == 'test')
    {
        echo "true";
    }
    else
    {
        echo "false"; // error
    }
}
else
{
    echo "false"; // error
}

?>
#JQuery‏‎