我正在使用jQuery Validate插件。
我有自定义验证器方法。它会查看是否正在使用电子邮件地址。
$.validator.methods.notinuse = function (value, element, param) {
$.post("/static/global/member/validation.ashx", { email: value})
.done(function (data) {
return data == "true";
});
};
这就是这样称呼的。
$("#form-Registration").validate({
rules: {
Email: {
notinuse: ''
}
},
messages: {
Email: {
notinuse: "Email address in use"
}
}
});
然而,这似乎会触发每一次过于频繁的按键触摸。
我的问题:
1)使用自定义验证器方法,有没有办法配置它被调用的事件?我认为无论是在表单提交还是文本字段焦点关闭都可以解决问题。我想保持它与js查询api保持一致。
答案 0 :(得分:2)
正确的格式是将自定义方法/规则设置为true
或传递参数,而不是将其设置为''
。您还将notinuse
中的messages
字段名称拼错为inuse
。
如果没有在每个按键上触发它,您可以将onkeyup
选项设置为false。这会将您的方法限制为仅在焦点注释和提交点击时触发。但是,此设置将影响表单上的所有字段。
$("#form-Registration").validate({
onkeyup: false, // <-- disable "onkeyup" for all form fields
rules: {
Email: {
notinuse: true
}
},
messages: {
Email: {
notinuse: "Email address in use"
}
}
});
如果您要仅为 这个字段禁用onkeyup
,则可以将onkeyup
设置为自定义功能。在此示例中,如果元素name
与notinuse
匹配,则密钥上无验证,否则,默认onkeyup
函数将用于所有其他字段。
$("#form-Registration").validate({
onkeyup: function( element, event ) {
if (element.name === "notinuse") {
return false;
} else if ( event.which === 9 && this.elementValue(element) === "" ) {
return;
} else if ( element.name in this.submitted || element === this.lastElement ) {
this.element(element);
}
},
rules: {
Email: {
notinuse: true
}
},
messages: {
Email: {
notinuse: "Email address in use"
}
}
});
DEMO 1(一个字段禁用onkeyup的两个字段):http://jsfiddle.net/E9WNy/
DEMO 2(您的代码,对您的单个字段禁用了onkeyup): http://jsfiddle.net/CJzJr/