У меня есть форма, которая имеет несколько полей, и я использую плагин JQuery из jqueryvalidation.org для проверки. Все это отлично работает, кроме одной проблемы.
У меня есть checkbox массив в форме (скажем, это называется music_ideas), который имеет три варианта: рок, поп и джаз. Я запускаю страницу со всеми опциями, и у меня есть правило jQuery для проверки следующим образом:
'#music_ideas': {required: true, minlength: 2}
Проблема заключается в следующем: у меня есть значок (галочка), когда информация действительна. Когда вы нажимаете на отправку, информация действительна, поэтому появляется, все хорошо. Если я сниму два флажка, я бы ожидал, что галочка исчезнет и будет заменена красным крестом, чтобы указать на ошибку. Это происходит не до тех пор, пока вы не представите форму еще раз, а затем (после отправки) динамическая проверка работает нормально (т.е. форма проверяется всякий раз, когда вы устанавливаете/снимаете галочку).
Любые идеи относительно того, где я могу ошибиться в этом?
С уважением, Джордж
РЕДАКТИРОВАТЬ: Ниже приведен минимальный рабочий пример:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="example.css">
<script src="jquery-1.11.0.min.js" type="text/javascript"></script>
<script src="jquery.validate.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
$('#test_form').validate({
success:"valid",
rules: {
'music_prefs[]': {
required:true,
minlength:2
}
},
messages: {
"music_prefs[]": {
required: " You need to select a music idea",
minlength: " You need to select at least two music ideas"
}
},
errorPlacement: function(error, element) {
if (element.attr("name") == 'music_prefs[]') {
element.parent().append(error);
}
else {
error.insertAfter(element);
}
},
});
});
</script>
</head>
<body>
<form id="test_form" action="#" method="post">
<div class="music_ideas"><label for="mi">Music Ideas:</label>
<input type="checkbox" name="music_prefs[]" id="mp1" checked value="Rock">Rock
<input type="checkbox" name="music_prefs[]" id="mp2" checked value="Pop">Pop
<input type="checkbox" name="music_prefs[]" id="mp3" checked value="Jazz">Jazz</div>
<input type="submit" name="btn_submit" value="Submit the form" id="bs">
<input type="reset" name="btn_reset" value="Clear Fields" id="br">
</form>
</body>
</html>
Соответствующие строки из файла CSS:
label.error {
background: url('unchecked.gif') no-repeat;
}
label.error.valid {
background: url('checked.gif') no-repeat;
}
Я думаю, проблема здесь в том, что когда пользователь отправляет форму, JQuery Validation видит, что ввод пользователя правильный, и перестает пытаться проверить форму.
Однако вы можете снова принудительно $("#test_form").valid()
проверку, вызвав $("#test_form").valid()
.
В этом случае мы хотим проверить, действительна ли форма, каждый раз, когда пользователь проверяет флажок:
$("#test_form input[type='checkbox']").change(function() {
$("#test_form").valid();
});
JSFiddle 1: http://jsfiddle.net/qW3az/
Или, если вы хотите, чтобы флажки отображались только после того, как пользователь впервые отправил форму:
$("#test_form").submit(function(e) {
e.preventDefault();
$("#test_form input[type='checkbox']").change(function() {
$("#test_form").valid();
});
});
JSFiddle 2: http://jsfiddle.net/Ydz5J/
Примечание: вы также можете вызвать $("#test_form").valid()
в $(document).ready()
чтобы немедленно показать этот флажок.
success: "valid"
опция success: "valid"
которая не ведет себя так, как вы ожидаете. Если форма недействительна при первой ее отправке, она будет отслеживать и реагировать на ваши попытки ее исправить. Но по какой-то причине, если флажки действительны при первой отправке формы, он добавляет «действительный» класс и прекращает их мониторинг. Я согласен с вами, что это выглядит странной логикой, поэтому вы можете сообщить об этом автору плагина как об ошибке.
validate()
и какие опции вы передаете? Можем ли мы увидеть вашу HTML-разметку?