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.проверить ?
8 ответов:
плагин validate будет проверять только текущий / сфокусированный элемент.Поэтому вам нужно будет добавить пользовательское правило в валидатор, чтобы проверить все флажки. Аналогично ответу выше.
$.validator.addMethod("roles", function(value, elem, param) { return $(".roles:checkbox:checked").length > 0; },"You must select at least one!");и на элемента:
<input class='{roles: true}' name='roles' type='checkbox' value='1' />кроме того, вы, вероятно, найдете сообщение об ошибке отображения, не совсем достаточно. Только 1 флажок выделен и отображается только 1 сообщение. Если вы нажмете другой отдельный флажок, который затем возвращает действительный для второй флажок, исходный по-прежнему помечен как недопустимый, и сообщение об ошибке по-прежнему отображается, несмотря на то, что форма действительна. Я всегда прибегал к тому, чтобы просто отображать и скрывать ошибки сам в этом случае.Валидатор тогда только заботится о том, чтобы не отправлять форму.
другой вариант у вас есть, чтобы написать функцию, которая изменит значение скрытого ввода, чтобы быть "действительным" на щелчок флажка, а затем прикрепить правило проверки к скрытому элементу. Этот будет проверять только в событии onSubmit, но будет отображать и скрывать сообщения в соответствующее время. Это примерно единственные параметры, которые вы можете использовать с плагином validate.
надеюсь, что это поможет!
пример из 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." } });и если вам нужны разные имена для входных данных, вы можете использовать somethig следующим образом:
<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." } });Я добавил скрытый вход перед входами и установил его на "обязательный", если нет выбранных флажков
МММ сначала ваши атрибуты id должны быть уникальными, ваш код, скорее всего, будет
<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 является только ориентировочной, все проверки должны выполняться на стороне сервера.
$("#idform").validate({ rules: { 'roles': { required: true, }, }, messages: { 'roles': { required: "One Option please", }, } });
вот как я справлялся с этим в прошлом:
$().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(); } }); });
весьма вероятно, что вы хотите иметь текст рядом с флажком. В этом случае вы можете поставить флажок внутри метки, как я делаю ниже:
<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); }Это зависит от вашего макета, но то, что я сделал-это спецразмещение ошибок элементы управления checkbox. Я получаю родитель флажка, который является меткой, а затем я получаю его родитель, который является div в моем случае. Таким образом, ошибка помещается под списком элементов управления checkbox.
sir_neanderthal уже опубликовал хороший ответ.
Я просто хочу отметить, что если вы хотите использовать разные имена для входа вы можете использовать (или просто скопировать метод) способ require_from_group от официальной проверки jQuery дополнительные-методы.js (ссылка на CDN для версии 1.13.1).
убедитесь, что
input-name[]в кавычках в наборе. Мне потребовалось несколько часов, чтобы понять эту часть.$('#testform').validate({ rules : { "name[]": { required: true, minlength: 1 } } });подробнее здесь... http://docs.jquery.com/Plugins/Valid...ets.2C_dots.29
Comments