Я использую jQuery с Validate Plugin и потрясающим методом Натана Лонга require_from_group К сожалению, у меня возникла проблема с проверкой других полей внутри формы.
Все, что находится над набором обязательных полей, не отображает должным образом свои сообщения об ошибках.
Это (плюс jQuery 1.4.2 и Validate Plugin) - мой код:
<form>
<label for="fullName">Name <em>required</em></label>
<input id="fullName" name="fullName" type="text" class="required"><br />
<fieldset>
<legend>Enter 1 of 3 emails <em> required</em></legend>
<label for="field1">field1</label><input id="field1" class="group_required email" type="text" name="field1" /><br />
<label for="field2">field2</label><input id="field2" class="group_required email" type="text" name="field2" /><br />
<label for="field3">field3</label><input id="field3" class="group_required email" type="text" name="field3" /><br />
</fieldset>
<input name="submitbutton" type="submit" />
</form>
<script>
jQuery.validator.addMethod("require_from_group", function(value, element, options) {
numberRequired = options[0];
selector = options[1];
//Look for our selector within the parent form
var validOrNot = $(selector, element.form).filter(function() {
// Each field is kept if it has a value
return $(this).val();
// Set to true if there are enough, else to false
}).length >= numberRequired;
if(!$(element).data('being_validated')) {
var fields = $(selector, element.form);
//.valid() means "validate using all applicable rules" (which
//includes this one)
fields.data('being_validated', true).valid();
fields.data('being_validated', false);
}
return validOrNot;
// {0} below is the 0th item in the options field
}, jQuery.format("Please fill out at least {0} of these fields."));
$(document).ready(function(){
$("form").validate({
debug: true,
});
jQuery.validator.addClassRules("group_required", {require_from_group: [1, ".group_required"]});
});
</script>
Фактическая страницаболее сложный, но это весь код, который вам нужен, чтобы повторить проблему.Отправьте форму без заполнения каких-либо полей, и вы увидите сообщение об ошибке рядом с 3 в группе, но не в поле имени.Если поле имени находится в HTML после проверки набора полей, оно работает нормально.При выделении фокуса поля имени, а затем размытия появляется правильное сообщение об ошибке, но оно не появляется при отправке.
Я видел еще одного человека с этой проблемой в комментариях к исходному вопросу, но не видел ответов:(
Закомментирование:
fields.data('being_validated', true).valid();
исправляет проблему с отображением сообщения об ошибке, но вновь вводит проблемы, которые пытался решить Натан.