Я использую плагин проверки правильности jquery для проверки моих форм.
Когда я вызываю метод.valid() какого-либо элемента в другой проверке элемента, тогда сообщение об ошибке текущего элемента не удаляется.
Скажем, у меня есть элементы E1 и E2. Метод проверки для элемента E1 - это метод 1. В методе 1, если я вызываю 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>
Благодарю.
Во-первых, 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-адресов. Просто используйте правило ipv4
которое уже встроено в файл additional-methods.js
плагина.
$('#form1').validate({
rules: {
ip: {
required: true,
ipv4: true
},
ip2: {
required: true,
ipv4: true
}
}
});
DEMO: https://jsfiddle.net/p5gn6zhe/
Что касается вызова .valid()
в поле # 2 внутри пользовательского правила IP для поля # 1; неясно, почему вы хотите это сделать. Вы хотите, чтобы проверка поля # 2 зависела от того, заполнено ли поле №1? Если так, то что-то еще.
В противном случае вы будете запускать .valid()
с помощью внешнего обработчика.
$('#ip').on('keyup blur', function() {
$("#ip2").valid();
});
ДЕМО 2: https://jsfiddle.net/p5gn6zhe/2/