解决:我检查了我的jquery-validate.js版本,发现它首先没有实现onkeyup处理程序。我正在使用1.12 Opre。我不知道为什么它没有包含那个处理程序,因为从我在github上看到的,onkeyup的功能在2013年可用。也许我从某个地方得到了一个糟糕的分支。所以,我所做的只是更新到1.14,一切都按预期工作。
更新:经过更多研究后,我意识到问题更多的是关于验证没有在“onkeyup”上完成,jQuery Validate Plugin应该默认执行。
也许这就是我使用jQuery validate插件的方式,但是如果我输入无效的电子邮件,我会在输入下方显示一个红色警报区域:
var validationPluginDefaults = {
ignore: [],
errorElement: 'p', //default input error message container <p>
errorClass: 'text-error', // default input error message class
focusInvalid: true, //focus on the first invalid field
messages: {},
invalidHandler: function (event, validator) { //display error alert on form submit
},
highlight: function (el) { // hightlight error inputs
//jQuery(el).closest('.control-group').addClass('error'); // set error class to the control group
},
success: function (err, el) {
jQuery(el).next(".text-error").hide();
jQuery(el).next(".text-error").remove();
},
errorPlacement: function (error, element) {
error.insertAfter(element);
},
onfocusin: function () {},
onfocusout: function () {}
};
当我更正电子邮件并直接点击我的提交按钮(不触发onblur事件)时,先前的错误字段将被删除,然后表单跳转...让我错过了正确的命中。
这是我的验证规则:
var validator = jQuery.extend(validationPluginDefaults,{
rules: {
loginName: {
required: true,
email: true,
},
firstName: {
minlength: 2,
onlyAlphaAndHyphen: true,
required: true,
},
lastName: {
minlength: 2,
required: true,
},
email: {
required: true,
email: true,
equalTo: "#loginName",
}
}
});
以下是我在函数中触发它的方法:
$("#updateUserForm").validate(validator);
if ($("#updateUserForm").valid()){
现在我知道你通常不会在.valid()之前调用.validate(),并且你应该在页面加载时调用它。但是我继承了某人糟糕的代码,这就是我到目前为止所做的。无论如何,我尝试了另一种方式,我仍然看到了错误。
在文本更改事件期间无法完成此电子邮件验证,因此我不必退出该字段吗?
答案 0 :(得分:1)
您是否尝试过使用onChange事件来实现此目的?
$("#updateUserForm").on('change', 'input', function() {
$(this).validate(validator);
});