jQuery只在SUBMITvalidation规则

假设我有一个查找城市,州位置的表单。 如果用户输入了错误的城市,状态,我希望表单能够根据用户输入检查数据库,并查看输入是否有效。 如果不是,我希望用户提示。

因此,表单Validate是我的插件。

$("#form").validate({ rules: { citystate: { required: true, myCustomAjaxSyncronousCheckAgainstDBRule: true } submitHandler: function(form) { if ($("#form").valid()) { form.submit(); } } }); 

现在说这个表单必须在我的网站的4个不同的地方使用,所以很难重构myCustomAjaxSyncronousCheckAgainsDBRule(伪名称btw)并在我的网站上有4次相同的代码。 这就是我在JS文件中创建自定义规则的原因。 但有没有办法只能在提交时检查规则。 因为如果用户输入无效,它将在每个键击中检查它,这可能非常麻烦。 特别是因为我有jQuery.ui.autocomplete运行unjuction。

作为替代方法,您可以更直接地将函数传递给onfocusoutonkeyup设置,以确定是否必须在这些事件中validation元素,如下所示:

 jQuery.validator.defaults.onfocusout = function (element, event) { // detectect if is the element you dont want validate // the element has to have the attribute 'data-control="mycitycontrol"' // you can also identify your element as you please if ($(element).data("control") === "mycitycontrol") return; if (!this.checkable(element) && (element.name in this.submitted || !this.optional(element))) { this.element(element); } } jQuery.validator.defaults.onkeyup = function (element, event) { // detectect if is the element you dont want validate // the element has to have the attribute 'data-control="mycitycontrol"' // you can also identify your element as you please if ($(element).data("control") === "mycitycontrol") return; if (event.which === 9 && this.elementValue(element) === "") { return; } else if (element.name in this.submitted || element === this.lastElement) { this.element(element); } } 

所有validation都可以单独设置(onclick,onkeypress,onsubmit等)。

有关演示和详细信息,请访问docs网站http://docs.jquery.com/Plugins/Validation/validate

 $("#form").validate({ onkeyup: false, onclick: false }) 

 $.extend($("#form-id").validate().settings, { onkeyup: false, onfocusout: false }); 

这是一个可能有效的想法:单独绑定您不希望validationkeyup事件的字段的keyup函数,并让它不起泡:

 $('#citystateID').bind('keyup',function(){ return false; }); 

我无法弄清楚如何绑定validation器特定事件(focusin和focusout),所以当焦点离开你的“citystate”输入时它仍会运行validation,但它更接近你想要的?

我在这里简单测试了一下: http : //jsfiddle.net/svUdp/似乎工作正常(看着你的控制台看看会发生什么 – 很多事件被触发,但没有那么多validation)。

如果您尝试仅在提交事件上触发特定validation方法,同时允许其他validation方法正常触发(例如,在onkeyup事件上),则可以在提交事件触发时动态添加规则,然后删除在执行validation后。 绑定的顺序很重要; 保持他们的秩序。

 $('#form').bind('submit', function(event) { $('#citystate').rules('add', {myCustomAjaxSyncronousCheckAgainstDBRule: true}); event.preventDefault(); }); $('#form').validate({ rules: { citystate: { required: true } } }); $('#form').bind('submit', function(event) { $('#citystate').rules('remove', 'myCustomAjaxSyncronousCheckAgainstDBRule'); event.preventDefault(); }); 

$("#form").validate({ onfocusout: false, onkeyup: false, onclick: false });