помогите с jquery проверить плагин и флажки - PullRequest
4 голосов
/ 30 июля 2011

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

<label>Would you like to compete?</label>
      <input type="checkbox"  name="compete1" value="2" class="competecheckbox" >
      <label for="compete_no">No</label>
      <input type="checkbox" name="compete2" value="1" class="competecheckbox">
      <label for="compete_yes">Yes</label>
      <div id="competeyes">
        <label class="competeyestxt" hidden=true>Which Location?</label>
        <textarea rows="4" cols="40" maxlength="2000" name="competeyestextarea" class="competeyestxt" hidden="true">
        </textarea>
      </div>

Я пытался добавить

$.validator.addClassRules(
"competecheckbox", {required: true, minlength: 1});

Это вроде работает, но показывает 2 сообщения об ошибках. По одному на каждый соответствующий класс 'Compettecheckbox'.

Проблема в том, что, даже если пользователь выберет «Compette1», сообщение об ошибке проверки остается для «Конкурса2».

Как очистить оба сообщения, если пользователь установил хотя бы один флажок?

спасибо

Ответы [ 2 ]

10 голосов
/ 31 июля 2011

У меня получилось что-то вроде этого:

 <label>Would you like to compete?</label>
      <input type="checkbox"  name="compete[]" value="2" class="competecheckbox" >
      <label for="compete_no">No</label>
      <input type="checkbox" name="compete[]" value="1" class="competecheckbox">
      <label for="compete_yes">Yes</label>
      <div id="competeyes">
        <label class="competeyestxt" hidden=true>Which Location?</label>
        <textarea rows="4" cols="40" maxlength="2000" name="competeyestextarea" class="competeyestxt" hidden="true">
        </textarea>
      </div>


When the form is submitted you get values in an array as compete[1], compete[2] etc.
I didn't know that you could do an empty array for form variable names.
Every day I find out how ignorant I am :)

Правило проверки будет выглядеть как

$('#survey').validate( {
    rules: {
        "compete[]": {
            required: true,
            minlength: 1
        }
  });

The quotes around "compete[]" are required as explained here:

http://docs.jquery.com/Plugins/Validation/Reference#Fields_with_complex_names_.28brackets.2C_dots.29

4 голосов
/ 30 июля 2011

Я бы использовал опцию groups для этого.Эта опция позволяет вам группировать все, что вы хотите input s:

$("#form").validate({
    groups: {
        competecheckbox: "compete1 compete2"
    },
    errorPlacement: function ($error, $element) {
        if ($element.attr("name") === "compete1" || $element.attr("name") === "compete2") {
            $error.insertAfter("label[for='compete_yes']");
        } else {
            $error.insertAfter($element);
        }
    }
});

Пример: http://jsfiddle.net/z37Sj/

Примечания:

  • errorPlacement используется для определения, является ли сообщение одним из сгруппированных полей.Если это так, ошибка вставляется после флажка «да» (это легко изменить).В противном случае он занимает позицию по умолчанию после элемента.
  • Опция groups используется для указания группы с именем competecheckbox, которая включает в себя compete1 и compete2.Эти два поля проверяются вместе.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...