当前位置:  开发笔记 > 编程语言 > 正文

如何使用Twitter Bootstrap popovers进行jQuery验证通知?

如何解决《如何使用TwitterBootstrappopovers进行jQuery验证通知?》经验,为你挑选了5个好方法。

我可以很容易地使用bootstrap使弹出窗口出现,我也可以使用标准的jQuery验证插件或jQuery验证引擎进行验证,但我无法弄清楚如何将其中一个提供给另一个.

我认为我需要的是一些钩子,当它想要显示通知时由验证器调用,给它一个将消息和目标元素传递给弹出窗口的闭包.这似乎是一种依赖注入.

理论上一切都很好,但我无法弄清楚钩子的位置,或者即使在任一验证引擎中都存在.他们似乎都有责任负责显示通知,包括各种精心设置的放置,包装器,样式选项,当我所有人都是错误类型(我不一定需要消息文本)和它相关的元素至.我找到了整个表单的钩子,而不是单独的通知.

我更喜欢使用类来定义规则的验证系统,因为它们与动态创建的表单很好地配合.

任何人都有解决方案或更好的主意?



1> Kenny Meyer..:

这是一个动手的例子:

$('form').validate({
    errorClass:'error',
    validClass:'success',
    errorElement:'span',
    highlight: function (element, errorClass, validClass) { 
        $(element).parents("div[class='clearfix']").addClass(errorClass).removeClass(validClass); 
    }, 
    unhighlight: function (element, errorClass, validClass) { 
        $(element).parents(".error").removeClass(errorClass).addClass(validClass); 
    }
});

在此输入图像描述

它并没有真正使用bootstrap popovers,但它看起来非常好并且很容易实现.

UPDATE

因此,要进行弹出窗口验证,您可以使用以下代码:

$("form").validate({
  rules : {
    test : {
      minlength: 3 ,
      required: true
    }
  },
  showErrors: function(errorMap, errorList) {
    $.each(this.successList, function(index, value) {
      return $(value).popover("hide");
    });
    return $.each(errorList, function(index, value) {
      var _popover;
      _popover = $(value.element).popover({
        trigger: "manual",
        placement: "top",
        content: value.message,
        template: "

" }); // Bootstrap 3.x : //_popover.data("bs.popover").options.content = value.message; // Bootstrap 2.x : _popover.data("popover").options.content = value.message; return $(value.element).popover("show"); }); } });

你得到这样的东西:

在此输入图像描述

看看jsFiddle.


只需快速说明,使用最新版本的Bootstrap,不再有.data("popover")键.也许为了避免碰撞,他们将密钥更改为"bs.popover".我花了一段时间才弄清楚为什么我得到*undefined*错误.所以现在你需要在上面的代码中使用*_popover.data("bs.popover").options.content = value.message;*.
Upvoted,因为这是我正在寻找的方向.:-)请参阅我的答案的变体.

2> Chris Fulsto..:

看看highlightshowErrors jQuery Validator选项,这些将让你挂钩自己的自定义错误亮点,触发Bootstrap弹出窗口.



3> Varun Singh..:

Chris Fulstow做对了,但它还花了我一段时间,所以继承完整的代码:

这会显示错误的弹出框,并隐藏默认的错误标签:

$('#login').validate({
  highlight: function(element, errClass) {
    $(element).popover('show');
  },
  unhighlight: function(element, errClass) {
    $(element).popover('hide');
  },
  errorPlacement: function(err, element) {
    err.hide();
  }
}).form();

这设置了popover.你唯一需要的是触发器:'手动'

$('#password').popover({
  placement: 'below',
  offset: 20,
  trigger: 'manual'
});

传递给popover的标题和内容属性不起作用,因此我在#password输入中将其内联指定为data-content ='Minimum 5 characters'和data-original-title ='Invalid Password'.您还需要在表单中使用rel ='popover'.

这样可行,但是弹出窗口在未经选择时闪烁.知道怎么解决这个问题吗?



4> Jeffrey Gilb..:

这是对Varun Singh的优秀建议的跟进,即使弹出窗口已经存在,也可以防止验证的"闪烁"问题不断尝试"显示".我只是添加了一个错误状态数组来捕获哪些元素显示错误,哪些不显示错误.奇迹般有效!

var errorStates = [];

$('#LoginForm').validate({
    errorClass:'error',
    validClass:'success',
    errorElement:'span',
    highlight: function (element, errorClass) {
        if($.inArray(element, errorStates) == -1){
            errorStates[errorStates.length] = element;
            $(element).popover('show');
        }
    }, 
    unhighlight: function (element, errorClass, validClass) {
        if($.inArray(element, errorStates) != -1){
            this.errorStates = $.grep(errorStates, function(value) {
              return value != errorStates;
            });
            $(element).popover('hide');
        }
    },
    errorPlacement: function(err, element) {
        err.hide();
    }
});

$('#Login_unique_identifier').popover({
    placement: 'right',
    offset: 20,
    trigger: 'manual'
});

$('#Login_password').popover({
    placement: 'right',
    offset: 20,
    trigger: 'manual'
});



5> tonycoco..:

这个用于jQuery Validation Plugin的jQuery扩展(使用1.9.0版测试)可以解决问题.

https://github.com/tonycoco/rails_template/blob/master/files/assets/javascripts/jquery.validate.bootstrap.js

这也增加了一些Rails-esk错误消息.

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有