【问题标题】:jQuery validation select2jQuery验证选择2
【发布时间】:2014-09-17 19:05:57
【问题描述】:

我使用 jQuery 验证插件验证我的表单。我使用 jQuery select2 插件更改样式下拉菜单。如果验证回调错误我的输入显示/添加类错误框(红色边框)否则显示/添加类成功框(绿色边框)。这在正常输入中有效,但在 select2 中无效。当我为选择框错误框(红色边框)选择任何值时,不会隐藏/切换到成功框。 select2 在单击提交按钮后起作用。

JS:

$('form').validate({
    rules: {
        firstname: {
            minlength: 3,
            maxlength: 15,
            required: true
        },
        lastname: {
            minlength: 3,
            maxlength: 15,
            required: true
        }
    },
    highlight: function (element, errorClass, validClass) {
        if (element.type === "radio") {
            this.findByName(element.name).addClass(errorClass).removeClass(validClass);
        } else {
            $(element).closest('.form-group').removeClass('has-success has-feedback').addClass('has-error has-feedback');
            $(element).closest('.form-group').find('i.fa').remove();
            $(element).closest('.form-group').append('<i class="fa icon-plane icon-2x form-control-feedback"></i>')
        }
    },
    unhighlight: function (element, errorClass, validClass) {
        if (element.type === "radio") {
            this.findByName(element.name).removeClass(errorClass).addClass(validClass);
        } else {
            $(element).closest('.form-group').removeClass('has-error has-feedback').addClass('has-success has-feedback');
            $(element).closest('.form-group').find('i.fa').remove();
            $(element).closest('.form-group').append('<i class="fa icon-plane icon-2x  form-control-feedback"></i>');
        }
    },
    errorElement: 'span',
    errorClass: 'help-block',
    errorPlacement: function (error, element) {
        if (element.parent('.input-group').length) {
            error.insertAfter(element.parent());
        } else {
            error.insertAfter(element);
        }
    }
});
$("#lstColors").select2({
    placeholder: "Select a Color",
    width: "200px"
});

如何解决这个问题?!

演示:http://jsfiddle.net/hTPY7/1413/

【问题讨论】:

    标签: javascript jquery css validation


    【解决方案1】:

    jquery.validate 没有注意到 select2 发生了变化。虽然我不确定为什么会出现这种情况,但您可以通过注意何时提交表单来解决此问题(可能通过将“提交”类应用于用户提交的任何表单):

    $('form').submit(function() { 
        $(this).addClass('submitted');
    });
    

    然后在select2改变时调用$().valid(),导致j​​query.validate重新验证表单:

    $('#lstColors').change(function() {
        if ($('form').hasClass('submitted'))
            $('form').valid();
    });
    

    这是一个 jsFiddle 分支,它可以工作: http://jsfiddle.net/Tdafh/1/

    【讨论】:

    • 运行你的小提琴仍然不会在我的表单上的下拉字段周围放置红色阴影边框。
    • 你用的是什么浏览器?在 Chrome 上,如果我点击提交而不填写任何内容,两个字段都会变为红色。如果我然后修复最喜欢的颜色,它会立即变成绿色。如果我重新开始并设置颜色并提交,它会立即变为绿色。你能描述一下哪些行为是不正确的吗?
    • 我会说这描述了正确的行为,但我在 Firefox 30 上,你的小提琴似乎对我不起作用。在我回家之前无法在 Chrome 中测试它。我还可以确认它在 IE9 中不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-24
    • 2018-04-01
    • 2011-02-23
    • 2010-10-22
    相关资源
    最近更新 更多