假设我有一个查找城市,州位置的表单。如果用户输入了错误的城市,状态,我希望表单能够根据用户输入检查数据库,并查看输入是否有效。如果不是,我希望用户提示。
因此,表单Validate是我的插件。
$("#form").validate({
rules: {
citystate: {
required: true,
myCustomAjaxSyncronousCheckAgainstDBRule: true
}
submitHandler: function(form) {
if ($("#form").valid()) {
form.submit();
}
}
});
现在说这个表单必须在我的网站的4个不同的地方使用,所以很难重构myCustomAjaxSyncronousCheckAgainsDBRule(虚假名称顺便说一句)并在我的网站上有4次相同的代码。这就是我在JS文件中创建自定义规则的原因。但有没有办法只能在提交时检查规则。因为如果用户输入无效,它将在每次击键时检查它,这可能非常麻烦。特别是因为我有jQuery.ui.autocomplete运行不正确。
答案 0 :(得分:33)
所有验证都可以单独设置(onclick,onkeypress,onsubmit等)。
演示文稿网站上提供了演示和详细信息 http://docs.jquery.com/Plugins/Validation/validate
$("#form").validate({
onkeyup: false,
onclick: false
})
答案 1 :(得分:10)
作为一种替代方法,您可以更直接地将函数传递给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);
}
}
答案 2 :(得分:9)
$.extend($("#form-id").validate().settings, {
onkeyup: false,
onfocusout: false
});
答案 3 :(得分:6)
这是一个可能有效的想法:单独绑定您不希望验证keyup事件的字段的keyup函数,并让它不起泡:
$('#citystateID').bind('keyup',function(){
return false;
});
我无法弄清楚如何绑定验证器特定事件(focusin和focusout),所以当焦点离开你的“citystate”输入时它仍会运行验证,但它更接近你想要的?
我在这里简单测试了一下:http://jsfiddle.net/svUdp/似乎工作正常(看着你的控制台看看会发生什么 - 很多事件被触发,但没有那么多验证)。
答案 4 :(得分:6)
如果您尝试获取特定的验证方法仅在提交事件上触发,同时允许其他验证方法正常触发(例如,在onkeyup事件上),那么您可以在提交事件触发时动态添加规则,然后在执行验证后将其删除。绑定的顺序很重要;保持秩序。
$('#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();
});
答案 5 :(得分:4)
$("#form").validate({
onfocusout: false,
onkeyup: false,
onclick: false
});