jquery validate中groups,errorPlacement和success共用bug

jquery validate的文档http://docs.jquery.com/Plugins/Validation/validate#toptions

groups就是把若干的文本框,形成一个组,此组可以有统一的错误提示,组中的元素不论哪个没有通过都会显示错误

success是验证通过后可以执行一些东西,比如显示OK

根据文档中的groups和success提供的示例代码

   1: $("#myform").validate({
   2:   groups: {
   3:     username: "fname lname"
   4:   },
   5:   errorPlacement: function(error, element) {
   6:      if (element.attr("name") == "fname" 
   7:                  || element.attr("name") == "lname" )
   8:        error.insertAfter("#lastname");
   9:      else
  10:        error.insertAfter(element);
  11:    },
  12:    debug:true
  13:  })
   1: $("#myform").validate({
   2:    success: function(label) {
   3:      label.addClass("valid").text("Ok!")
   4:    },
   5:    submitHandler: function() { alert("Submitted!") }
   6: })

当同时使用这两者的时候,组中的某一个元素验证通过了,就会执行success中的东西,错误提示变成了OK,这显然是不对的。

遗憾的是success中,只提供了label参数,label就是显示错误或正确信息的地方,而没有提供element,无法获得是那个文本框触发了success

临时的解决办法:

jquery.validate.js中(mvc自带),623行

showLabel: function(element, message)

showLabel中调用了success,showLabel在被调用时传入了element

修改651行

: this.settings.success( label );

改为

: this.settings.success( label,element);

这样可以在自己设置的success中通过element获取是那个文本框触发了success,然后判断是否在组中,组中其他元素是否有错误等等

希望validate能够有更好的改进

原文地址:https://www.cnblogs.com/czcz1024/p/2221055.html