Jquery移动验证错误位置&;挑选

Jquery移动验证错误位置&;挑选,jquery,jquery-mobile,jquery-validate,Jquery,Jquery Mobile,Jquery Validate,我在jQuery移动项目的表单中添加了Basistance jQuery验证。它工作完美,除了文本输入中显示的错误,而不是它们下面的错误。我知道我可以使用errorPlacement在输入下面使用div来输出错误消息,但这似乎不适用于选择菜单 所以我有两个问题: 我是否可以做一些不同的事情,使错误消息显示在输入下方而不使用errorPlacement 如果我必须使用errorPlacement,如何获取错误消息以显示选择菜单 这是我的密码: <script> $('#page

我在jQuery移动项目的表单中添加了Basistance jQuery验证。它工作完美,除了文本输入中显示的错误,而不是它们下面的错误。我知道我可以使用errorPlacement在输入下面使用div来输出错误消息,但这似乎不适用于选择菜单

所以我有两个问题:

  • 我是否可以做一些不同的事情,使错误消息显示在输入下方而不使用errorPlacement
  • 如果我必须使用errorPlacement,如何获取错误消息以显示选择菜单
  • 这是我的密码:

    <script>
        $('#page').bind('pageinit', function(event) {
            $('#registrationForm').validate({
                rules: {
                    firstname: {
                        required: true
                    },
                    lastname: {
                        required: true
                    },
                    email: {
                        required: true,
                        email: true,
                        remote: "duplicateCheck.php"
                    },
                    password: {
                        required: true,
                        minlength: 5
                    },
                    verify_password: {
                        required: true,
                        minlength: 5,
                        equalTo: "#password"
                    },
                    handicap: {
                        required: true,
                        maxlength: 2,
                        digits: true
                    },
                    stopper: {
                        required: true
                    }
                },
                messages: {
                    firstname: {
                        required: "Please enter your first name."
                    },
                    lastname: {
                        required: "Please enter your last name."
                    },
                    email: {
                        required: "Please enter your email.",
                        email: "Please enter a valid email.",
                    },
                    password: {
                        required: "Please enter a password.",
                        minlength: "You password must be at least 5 characters long."
                    },
                    verify_password: {
                        required: "Please enter a password.",
                        minlength: "You password must be at least 5 characters long.",
                        equalTo: "You passwords did not match."
                    },
                    handicap: {
                        required: "Please enter your handicap.",
                        maxlength: "Your max handicap can't be higher than 99.",
                        digits: "Please only enter numbers."
                    },
                    stopper: {
                        required: "Please enter the word above."
                    }
                },
                errorPlacement: function(error, element) {
                    error.appendTo( element.parent().next() );
                }
            });
        });
    </script>
    

    默认情况下,将jQuery验证插件与jQuery Mobile一起使用时,错误消息显示在输入元素下方。正在删除自定义的
    errorPlacement
    回调函数

    简单演示:

    但是,jQuery Mobile将
    select
    元素包装在
    div
    元素中,因此当插件添加错误
    标签
    时,它似乎放在
    select
    元素中。要解决此问题,请按如下所示使用
    errorPlacement
    回调。它检查元素是否为
    select
    元素,然后在最外层的
    div
    包装后插入错误
    标签。如果元素不是
    select
    ,则只使用默认位置

    errorPlacement: function (error, element) {
        if (element.is('select')) {
            error.insertAfter(element.parents('div.ui-select'));
        } else {
            error.insertAfter(element);  // default placement
        }
    }
    

    演示使用
    选择

    顺便提一下,从Jquery Mobile 1.4.3开始,这仍然是一个问题,@Sparky建议的解决方法修复了它。

    在标记问题时请更加小心。jQuery验证和jQuery验证引擎是两个不同的东西。我很抱歉。谢谢你把它修好。
    $(document).on('pageinit', function () {
    
        $('#registrationForm').validate({
            rules: {
                firstname: {
                    required: true
                },
                lastname: {
                    required: true
                }
            },
            messages: {
                firstname: {
                    required: "Please enter your first name."
                },
                lastname: {
                    required: "Please enter your last name."
                }
            }
        });
    
    });
    
    errorPlacement: function (error, element) {
        if (element.is('select')) {
            error.insertAfter(element.parents('div.ui-select'));
        } else {
            error.insertAfter(element);  // default placement
        }
    }