2010-06-28 2 views
0

Прежде всего позвольте мне поблагодарить всех вас за ваши удивительные усилия и помощь до сих пор. Теперь на вопрос.jQuery, как я могу указать, что по крайней мере один флажок в группе не требуется

У меня есть пять флажков, и по крайней мере один из пяти должен быть проверен для проверки по мере необходимости.

Я видел несколько способов, как это сделать, но я не могу заставить их работать.

Solve One Solve Two

Теперь я использую как плагин проверки и плагин метаданных. Как я могу легко сказать, проверяется ли один флажок с классом required_group? Остальное больше не требуется? Я также дал все флажки class="required"

Как всегда Спасибо в Advance!

Редактировать: Приносим извинения за неправильное формулирование вопроса. Я бы использовал переключатели или кнопки выбора, поскольку это довольно просто, но мне предлагается использовать флажки. Еще раз спасибо за ваше время и извините за путаницу.

ОКОНЧАТЕЛЬНЫЙ ИЗОБРАЖЕНИЕ Так вот как я сделал это на случай, если кому-либо еще понадобится.

jQuery.validator.addMethod('ClassAppliedToCheckBoxes', function(value, element, checked) { 
      var $module = $(element).parents('.YourContainerClass'); 
      return $module.find('input:checked').length; 
      }); 

      jQuery.validator.addClassRules("ClassAppliedToCheckBoxes", { 
        'ClassAppliedToCheckBoxes' : true 
      }); 

      jQuery.validator.messages.required_group = 'Please check at least one of these fields.'; 
+0

Чтобы уточнить: если я проверяю флажки 2, 3, 4 или все, ваша форма все еще подтверждает мой ввод? Это по крайней мере одно или строго одно и не более? – FelipeAls

ответ

2

Пожалуйста, не делайте этого. Это ужасная практика с точки зрения удобства использования. Как только пользователи видят флажки, они предполагают, что будет многократный выбор. Для одного выбора у нас есть радиобокс. Дайте всем им одно и то же имя, и они будут эксклюзивными.

Пример:

I am a:<br/> 
<input type="radio" id="age_old" name="age" value="old"> 
    <label for="age_old">Oldtimer</label><br/> 
<input type="radio" id="age_mid" name="age" value="mid" checked> 
    <label for="age_mid">Middle-aged</label><br/> 
<input type="radio" id="age_young" name="age" value="young"> 
    <label for="age_young">Youth</label><br/> 

Bonus: нет JavaScript не требуется - все простой HTML. Если вам нужна возможность ничего не выбрать, просто добавьте еще один ящик радио с пустым значением:

<input type="radio" id="age_no" name="age" value=""> 
    <label for="age_no">...not telling!</label><br/> 

UPDATE: Было отмечено, что это не то, что речь идет о. Если это так, и другое чтение (необходимо хотя бы один флажок установить), игнорируйте это.

+1

re: удобство использования, я думаю, что пользователь может выбирать между 1 и 5. Если они выбирают 0, то подача формы должна быть остановлена. – nickf

+0

@nickf: ... а? Ни я, ни ОП не упоминали 1-5, 0, и не прекращали подачу, что я видел ... – Amadan

+0

Да, это случай, когда «Не делай этого» действительно правильный ответ - если мы не упустили что-то здесь , Вам никогда не нужно * больше * чем один элемент, который нужно проверить, правильно? – harpo

0

попробовать что-то вроде этого:

var $invalid = $(":checkbox.required").filter(function() { 
    var n = this.name; 
    return $(":checkbox[name='" + n "']:checked").length == 0; 
}); 

Оттуда, вы могли бы сделать несколько вещей. Чтобы прекратить отправку формы, проверьте, больше ли она длины (если это так, некоторые недопустимые). Для того, чтобы выделить недопустимых:

$invalid.parent().css({ color: '#f00' }); 

Обратите внимание, что это не очень эффективный алгоритм: он выполняет проверку на одной и той же группе, столько раз, сколько есть флажков. Если это узкое место, то есть место, которое вы можете улучшить, но в любом случае это будет хорошей отправной точкой.

1

Я согласен с Amadan в том, что флажки не подходят. Флажки для множественного выбора.Если вы хотите, чтобы сделать форму доступной, а затем сделать его SELECT:

<label for="myselect">Choose type of house</label> 

<select name="myselect" id="myselect" class="required"> 
    <option value="1">Option 1 Text</option> 
    <option value="2">Option 2 Text</option> 
    <option value="3">Option 3 Text</option> 
    <option value="4">Option 4 Text</option> 
    <option value="5">Option 5 Text</option> 
</select> 

Это сделает вашу форму добрее к людям, которые переходит его чтения с экрана. Radio buttons causes some issues для людей, которые просматривают формы.

+0

Я согласен, что SELECT очень похож на функционально, но радио-коробки ближе к флажкам визуально, поэтому я подумал, что это естественная замена. Однако (и, не будучи отключенным, я мог бы или не был бы прав), правильно закодированный CB/RB не менее безопасен, чем selectbox. Я думаю, вы увидите, что в моем примере, даже неосознанно, я следовал рекомендациям из вашей ссылки (использование «label», текст сразу после RB). Я признаю, что RB часто плохо кодируются, но все остальное. Закон осетровых. – Amadan

+0

Я согласен с тем, что переключатели более визуально привлекательны. Проблема, с которой я обращаюсь с выбором, состоит в том, чтобы упростить навигацию с помощью устройства чтения с экрана (переключатели, как правило, являются проблемой для этих людей). Если вы когда-нибудь получите шанс, сядьте на сеанс с человеком с ослабленным зрением, который перемещается по Сети с помощью программы чтения с экрана. Это действительно глазник и опыт обучения. –

+0

К сожалению, единственные люди с ослабленным зрением, с которыми я встречался, были глухонемыми людьми, говорящими на хорватском языке, в среднем плохо, а английский - плохо. Я никогда не входил в контакт с читателем экрана, видя, насколько хорватский не так популярен и не был бы очень полезен для этих людей (если бы кто-то не придумал роботизированную руку с синхронным переводом на хорватский знак). EDIT: Не сарказм. Раньше я добровольно выступал в качестве глухонемой организации. – Amadan

Смежные вопросы