使用 jQuery 根据两个不同的规则验证单个文本框 验证会跳过第二条错误消息
Validating a single text box against two different rules with jQuery Validation skips the second error message
考虑以下 HTML:
<form id="frm">
<input type="text" id="txt" name="txt" />
<input type="submit" value="click me" />
</form>
我需要使用 jQuery 验证插件 v1.13.1 和 jQuery 1.7.2 根据 2 条不同的规则验证文本框,因此:
$(function(){
var validator = $('#frm').validate({
errorPlacement: function (error, element) {
element.attr('title', error.text());
}
});
$.validator.addMethod('rule1', function (value, element) {
return value != null && value.length;
}, 'Rule 1 failed!');
$.validator.addMethod('rule2', function (value, element) {
return false;
}, 'Rule 2 failed!');
//Assign both rules to the text box.
$('#txt').rules('add', { rule1: true, rule2: true });
$('input[type="submit"]').click(function() {
if(!validator.form()) {
return false;
}
});
});
- 单击上面的按钮(保持文本框不变)。
- 将鼠标悬停在文本框上,它表示 Rule1 已失败。
- 现在,在文本框中输入一些内容,以便 Rule1 正确验证。
- 再按一下按钮。
- 再次将鼠标悬停在文本框上。虽然Rule1已经验证成功,但是它仍然说Rule1 failed,而不是Rule2。
问题是为什么?这是关联的 JSFiddle。
谢谢。
我不是 100% 确定,但我认为你 运行 遇到的问题是 value.length 不 return null/T/F,它 return 是范围从 0 到任意值,因此规则 1 永远不会生效。
尝试 (value.length > 0) T/F。
默认情况下,jQuery 验证会尝试从元素的 title
属性中读取错误消息(如果存在)。当然,由于您设置 标题中的错误消息,这将成为永久性的。这种奇怪的行为 is apparently deprecated 现在并且很快就会消失。
然而,与此同时,解决方法是在创建验证器时使用 ignoreTitle
选项:
var validator = $('#frm').validate({
ignoreTitle: true,
...
}
在此处查看 fiddle:http://jsfiddle.net/dp5pLr8x/4/
考虑以下 HTML:
<form id="frm">
<input type="text" id="txt" name="txt" />
<input type="submit" value="click me" />
</form>
我需要使用 jQuery 验证插件 v1.13.1 和 jQuery 1.7.2 根据 2 条不同的规则验证文本框,因此:
$(function(){
var validator = $('#frm').validate({
errorPlacement: function (error, element) {
element.attr('title', error.text());
}
});
$.validator.addMethod('rule1', function (value, element) {
return value != null && value.length;
}, 'Rule 1 failed!');
$.validator.addMethod('rule2', function (value, element) {
return false;
}, 'Rule 2 failed!');
//Assign both rules to the text box.
$('#txt').rules('add', { rule1: true, rule2: true });
$('input[type="submit"]').click(function() {
if(!validator.form()) {
return false;
}
});
});
- 单击上面的按钮(保持文本框不变)。
- 将鼠标悬停在文本框上,它表示 Rule1 已失败。
- 现在,在文本框中输入一些内容,以便 Rule1 正确验证。
- 再按一下按钮。
- 再次将鼠标悬停在文本框上。虽然Rule1已经验证成功,但是它仍然说Rule1 failed,而不是Rule2。
问题是为什么?这是关联的 JSFiddle。 谢谢。
我不是 100% 确定,但我认为你 运行 遇到的问题是 value.length 不 return null/T/F,它 return 是范围从 0 到任意值,因此规则 1 永远不会生效。
尝试 (value.length > 0) T/F。
默认情况下,jQuery 验证会尝试从元素的 title
属性中读取错误消息(如果存在)。当然,由于您设置 标题中的错误消息,这将成为永久性的。这种奇怪的行为 is apparently deprecated 现在并且很快就会消失。
然而,与此同时,解决方法是在创建验证器时使用 ignoreTitle
选项:
var validator = $('#frm').validate({
ignoreTitle: true,
...
}
在此处查看 fiddle:http://jsfiddle.net/dp5pLr8x/4/