我正在使用jquery验证插件来验证我的表单。
当我在另一个元素验证中调用某个元素的.valid()方法时,不会删除当前元素错误消息。
说我有元素E1和E2。元素E1的验证方法是Method1。 在Method1中,如果我调用E2.valid()以编程方式触发验证。 即使元素有效,E1中的错误消息也不会被删除。
请找到代码。
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Validate IP Address using jQuery</title>
<script type="text/javascript"
src="http://ajax.microsoft.com/ajax/jQuery/jquery-1.4.2.min.js">
</script>
<script type="text/javascript" src=
"http://ajax.microsoft.com/ajax/jquery.validate/1.7/jquery.validate.min.js">
</script>
<script type="text/javascript">
$(document).ready((function() {
$.validator.addMethod('IP1Checker', function(value) {
$("#ip2").valid();
return isValidIPAddress(value);
}, 'Invalid IP address');
$.validator.addMethod('IP2Checker', function(value) {
return isValidIPAddress(value);
}, 'Invalid IP address');
$('#form1').validate({
rules: {
ip: {
required: true,
IP1Checker: true
},
ip2: {
required: true,
IP2Checker: true
}
}
});
function isValidIPAddress(value) {
var isValid = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(value);
if (isValid && (value === "0.0.0.0" || value === "255.255.255.255")) {
isValid = false;
}
return isValid;
}
}));
</script>
</head>
<body>
<form id="form1">
<input id="ip" name="ip" type="text" />
<input id="ip2" name="ip2" type="text" />
<input id="Submit2" type="submit" value="submit" />
</form>
</body>
</html>
感谢。
答案 0 :(得分:2)
首先,jQuery v1.4.2和jQuery Validate v1.7非常古老(大约在2010年),应该更新。
$.validator.addMethod('IP1Checker', function(value) {
$("#ip2").valid(); // <- you shouldn't do this
return isValidIPAddress(value);
}, 'Invalid IP address');
您不应该在.valid()
方法中调用.addMethod()
,因为它可能会将所有内容都放入循环中。 .addMethod()
方法仅用于创建新的验证规则,而不是用于其他功能,例如以编程方式触发验证测试。 (验证测试在特定字段或表单上运行所有规则。验证规则根据一个特定规则评估一个特定字段。)
您甚至不需要自定义方法来检查IP地址。只需使用已插入the additional-methods.js
file插件的ipv4
规则。
$('#form1').validate({
rules: {
ip: {
required: true,
ipv4: true
},
ip2: {
required: true,
ipv4: true
}
}
});
DEMO :https://jsfiddle.net/p5gn6zhe/
就字段#1的自定义IP规则中的字段#2调用.valid()
;它没有清楚地解释你为什么要这样做。您是否希望字段#2验证取决于字段#1是否已填写?如果是这样的话,那就完全是另一回事了。
否则,您将使用外部处理程序触发.valid()
。
$('#ip').on('keyup blur', function() {
$("#ip2").valid();
});
DEMO 2 :https://jsfiddle.net/p5gn6zhe/2/