2010-05-04 58 views
7

我目前正在设置jQuery验证插件以供我们的项目使用。在jQuery验证插件中自定义事件委托

默认情况下,会自动设置一些事件进行处理。即重点进/出,关键所有输入火灾验证事件。我希望它只在点击提交按钮时触发。

此功能似乎内置于插件中,这使得难以做到这一点(不修改插件代码,不是我想做的事)。

我发现在插件代码原型方法eventDelegate函数调用:

 $(this.currentForm) 
      .validateDelegate(":text, :password, :file, select, textarea", "focusin focusout keyup", delegate) 
      .validateDelegate(":radio, :checkbox, select, option", "click", delegate); 

当我删除从插件获取我的结果,这些线,但是我更愿意做的事情外插为了实现这一点。

任何人都可以帮我吗?如果您需要更多详情,请告诉我。我搜索了谷歌,并取得了一些成功。

感谢

编辑: 我基本上是试图验证只有在提交事件被触发形式。默认情况下,插件每次在输入控件中丢失焦点时都会进行验证。

回答

7

找到了答案。它作为验证方法中的选项的一部分被隐藏起来。

看到这个页面上onfocusout在等选项: http://docs.jquery.com/Plugins/Validation/validate#options

,我可以设置为false。

这里是我的代码,建立了我的验证(希望其他人会发现这很有用):

$(document).ready(function() { 
    $("form").each(function() { 
     $(this).validate({ 
      validateDelegate: function() { }, 
      onsubmit: true, 
      onkeydown: false, 
      onkeyup: false, 
      onfocusin: false, 
      onfocusout: false, 

      errorContainer: "#PanelError", 
      errorLabelContainer: "#PanelError ul", 
      wrapper: "li", 
      ignoreTitle: true, 
      errorClass: "Error", 

      highlight: function(element, errorClass, validClass) { 
       $(element).addClass(errorClass).removeClass(validClass); 
       $(element.form).find("#" + element.id) 
         .addClass(errorClass); 
      }, 
      unhighlight: function(element, errorClass, validClass) { 
       $(element).removeClass(errorClass).addClass(validClass); 
       $(element.form).find("#" + element.id) 
         .removeClass(errorClass); 
      } 
     }); 
    }); 
});