Проверка входных данных с одинаковым именем - PullRequest
2 голосов
/ 15 ноября 2011

Я использую метод, описанный здесь: http://iamcam.wordpress.com/2008/01/15/unchecked-checkbox-values/, чтобы получить значение, даже если флажок не установлен, я не буду вдаваться в подробности о том, зачем мне это нужно, но это необходимо.При этом ..

Весь этот замечательный метод является частью уровня абстракции для формы, которую я написал сам, у меня есть пара флажков, которые я хочу проверить с помощью jquery validate, проблема в том, чтоHTML-код выглядит следующим образом:

<input class="" type="hidden" value="0" name="check[legal]">
<input id="legal" class="required" type="checkbox" name="check[legal]" value="1">

Что происходит, так это то, что jquery validate проверяет первый ввод двух (так как они оба имеют одно и то же имя. Я понимаю, что я могу просто удалить первый и сделатьс его помощью я просто хочу узнать, есть ли способ проверить второй флажок, оставив все как есть (я вижу две дороги здесь: 1) проверить с помощью идентификатора ввода 2) исключить скрытые элементы из проверки, даже еслиЯ думаю, что таким образом он избежит даже второго, с тем же именем ..)

1 Ответ

3 голосов
/ 15 ноября 2011

Хорошо, прямой ответ на ваш вопрос заключается в том, что вы можете определить пользовательский метод проверки как , показанный в этом примере . Вот критический код:

$.validator.methods.checkLegal = function(value, element) {
    return $('input[type=checkbox][name="check[legal]"]').attr('checked');
}

$('form').validate({
    rules: { "check[legal]": {checkLegal: true} },
    messages: { "check[legal]": "You must check the box" },
});

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

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

jQuery(function($) {
    $('form').validate({
        rules: { "check[legal]": "required" },
    });

    $('#legal').click(function(e) {
        $('#legalHidden').val($(this).attr('checked') ? 1 : 0);
    });

});

На сервере вы просто будете ссылаться на check [legalhidden] и не беспокоиться о check [legal]. На клиенте вся проверка выполняется при проверке [legal], и значение копируется в скрытый переменную legal при каждом нажатии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...