Проверка jquery проверяет хотя бы один флажок
У меня есть что-то вроде этого:
<form>
<input name='roles' type='checkbox' value='1' />
<input name='roles' type='checkbox' value='2' />
<input name='roles' type='checkbox' value='3' />
<input name='roles' type='checkbox' value='4' />
<input name='roles' type='checkbox' value='5' />
<input type='submit' value='submit' />
<form>
Я хотел бы подтвердить, что необходимо проверить хотя бы один флажок (роли), возможно ли это с помощью jquery.validate?
Ответы
Ответ 1
Подтверждающий плагин будет проверять только текущий/сфокусированный элемент. Поэтому вам нужно будет добавить настраиваемое правило к валидатору для проверки всех флажков. Как и в предыдущем ответе.
$.validator.addMethod("roles", function(value, elem, param) {
if($(".roles:checkbox:checked").length > 0){
return true;
}else {
return false;
}
},"You must select at least one!");
И на элементе:
<input class='{roles: true}' name='roles' type='checkbox' value='1' />
Кроме того, вы, скорее всего, найдете сообщение об ошибке, но не вполне достаточно.
Отображается только 1 флажок и отображается только 1 сообщение. Если вы нажмете еще один отдельный флажок, который затем вернет действительный для второго флажок, исходный будет по-прежнему отмечен как недопустимый, и сообщение об ошибке все еще отображается, несмотря на то, что форма действительна.
Я всегда прибегал к простому отображению и скрытию ошибок в этом случае. Затем валидатор заботится только о том, чтобы не отправить форму.
Другой вариант, который у вас есть, - это написать функцию, которая изменит значение скрытого ввода как "действительное" на щелчок флажка, а затем прикрепит правило проверки к скрытому элементу. Это будет проверяться только в событии onSubmit, но будет отображать и скрывать сообщения в соответствующие моменты времени. Это о единственных опциях, которые вы можете использовать с плагином validate.
Надеюсь, что это поможет!
Ответ 2
Пример из https://github.com/ffmike/jquery-validate
<label for="spam_email">
<input type="checkbox" class="checkbox" id="spam_email" value="email" name="spam[]" validate="required:true, minlength:2" /> Spam via E-Mail </label>
<label for="spam_phone">
<input type="checkbox" class="checkbox" id="spam_phone" value="phone" name="spam[]" /> Spam via Phone </label>
<label for="spam_mail">
<input type="checkbox" class="checkbox" id="spam_mail" value="mail" name="spam[]" /> Spam via Mail </label>
<label for="spam[]" class="error">Please select at least two types of spam.</label>
То же самое без поля "проверять" в тегах только с помощью javascript:
$("#testform").validate({
rules: {
"spam[]": {
required: true,
minlength: 1
}
},
messages: {
"spam[]": "Please select at least two types of spam."
}
});
И если вам нужны разные имена для ввода, вы можете использовать что-то вроде этого:
<input type="hidden" name="spam" id="spam"/>
<label for="spam_phone">
<input type="checkbox" class="checkbox" id="spam_phone" value="phone" name="spam_phone" /> Spam via Phone</label>
<label for="spam_mail">
<input type="checkbox" class="checkbox" id="spam_mail" value="mail" name="spam_mail" /> Spam via Mail </label>
JavaScript:
$("#testform").validate({
rules: {
spam: {
required: function (element) {
var boxes = $('.checkbox');
if (boxes.filter(':checked').length == 0) {
return true;
}
return false;
},
minlength: 1
}
},
messages: {
spam: "Please select at least two types of spam."
}
});
Я добавил скрытый ввод перед входами и установил его в "required", если нет выбранных флажков
Ответ 3
Mmm сначала ваши идентификационные атрибуты должны быть уникальными, ваш код, вероятно, будет
<form>
<input class='roles' name='roles' type='checkbox' value='1' />
<input class='roles' name='roles' type='checkbox' value='2' />
<input class='roles' name='roles' type='checkbox' value='3' />
<input class='roles' name='roles' type='checkbox' value='4' />
<input class='roles' name='roles' type='checkbox' value='5' />
<input type='submit' value='submit' />
</form>
Для вашей проблемы:
if($('.roles:checkbox:checked').length == 0)
// no checkbox checked, do something...
else
// at least one checkbox checked...
НО, помните, что проверка формы JavaScript является только показательной, все проверки ДОЛЖНЫ выполняться на стороне сервера.
Ответ 4
$("#idform").validate({
rules: {
'roles': {
required: true,
},
},
messages: {
'roles': {
required: "One Option please",
},
}
});
Ответ 5
Вот как я имел дело с этим в прошлом:
$().ready(function() {
$("#contact").validate({
submitHandler: function(form) {
// see if selectone is even being used
var boxes = $('.selectone:checkbox');
if(boxes.length > 0) {
if( $('.selectone:checkbox:checked').length < 1) {
alert('Please select at least one checkbox');
boxes[0].focus();
return false;
}
}
form.submit();
}
});
});
Ответ 6
Очень вероятно, что вы хотите иметь текст рядом с этим флажком. В этом случае вы можете поместить флажок внутри ярлыка, как показано ниже:
<label style="width: 150px;"><input type="checkbox" name="damageTypeItems" value="72" aria-required="true" class="error"> All Over</label>
<label style="width: 150px;"><input type="checkbox" name="damageTypeItems" value="73" aria-required="true" class="error"> All Over X2</label>
Проблема заключается в том, что при отображении сообщения об ошибке он будет вставлен после флажка, но перед текстом, что делает его нечитаемым. Чтобы исправить это, я изменил функцию размещения ошибок:
if (element.is(":checkbox")) {
error.insertAfter(element.parent().parent());
}
else {
error.insertAfter(element);
}
Это зависит от вашего макета, но то, что я сделал, - это специальное размещение ошибок для элементов управления флажками. Я получаю родительский флажок, который является меткой, а затем я получаю родительский элемент, который является div в моем случае. Таким образом, ошибка помещается ниже списка элементов управления флажками.
Ответ 7
sir_neanderthal уже опубликовал хороший ответ.
Я просто хочу указать, что если вы хотите использовать разные имена для своих входов, вы также можете использовать (или просто скопировать метод) require_from_group из официальной проверки jQuery Дополнительные-методы .js (ссылка на CDN для версии 1.13.1).
Ответ 8
убедитесь, что input-name[]
находится в кавычках в наборе правил. Мне потребовалось несколько часов, чтобы понять, что из этого выйдет.
$('#testform').validate({
rules : {
"name[]": { required: true, minlength: 1 }
}
});
читайте больше здесь...
http://docs.jquery.com/Plugins/Valid...ets.2C_dots.29