说我有一个表格查找城市,州位置。如果用户输入不正确的城市,状态,我希望表单能够根据用户输入检查数据库,并查看输入是否有效。如果不是,我希望用户提示。
所以形式验证是我的插件。
$("#form").validate({ rules: { citystate: { required: true,myCustomAjaxSyncronousCheckAgainstDBRule: true } submitHandler: function(form) { if ($("#form").valid()) { form.submit(); } } });
现在说这个表单必须在我的网站的4个不同的地方使用,所以它会吸引重构myCustomAjaxSyncronousCheckAgainsDBRule(假名称btw),并在我的网站上有相同的代码4次。所以这就是为什么我在JS文件中创建一个自定义规则。但是有一种方法,只能在提交时检查规则。因为如果有一个无效的用户输入,它会检查它在每一个关键的中风,这可能是相当麻烦的。特别是因为我有jQuery.ui.autocomplete运行不一致。
解决方法
作为一种替代方法,您可以将函数传递给jquery.validator的onfocusout和onkeyup设置,以决定是否必须在这些事件中验证元素,如下所示:
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); } }