Прокрутите флажки и подсчитайте каждую отмеченную или непроверенную

У меня возникла проблема. Вот краткое объяснение.

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

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

(Check1 - checked)
(Check2 - не проверено)
(Check3 - отмечен)

1,0,1

Пока у меня есть этот код.

$('input[type=checkbox]').each(function () {
           if (this.checked) {
               console.log($(this).val()); 
           }
});

Он отлично работает, за исключением того, что он возвращает только проверенные, а не все.

Извините за новый вопрос. Я новичок в jquery.

Ответ 1

Чтобы построить строку результата точно в формате, который вы показываете, вы можете использовать это:

var sList = "";
$('input[type=checkbox]').each(function () {
    sList += "(" + $(this).val() + "-" + (this.checked ? "checked" : "not checked") + ")";
});
console.log (sList);

Однако, я согласен с @SLaks, я думаю, вам стоит пересмотреть структуру, в которую вы будете хранить это в своей базе данных.

EDIT: Извините, я неправильно прочитал формат вывода, который вы искали. Вот обновление:

var sList = "";
$('input[type=checkbox]').each(function () {
    var sThisVal = (this.checked ? "1" : "0");
    sList += (sList=="" ? sThisVal : "," + sThisVal);
});
console.log (sList);

Ответ 2

Использование селекторов

Вы можете установить все отмеченные флажки:

var boxes = $(":checkbox:checked");

И все не проверены следующим образом:

var nboxes = $(":checkbox:not(:checked)");

Вы можете просто прокрутить одну из этих коллекций и сохранить эти имена. Если что-то отсутствует, вы знаете, что оно было или не было проверено. В PHP, если у вас есть массив имен, которые были проверены, вы можете просто выполнить запрос in_array(), чтобы узнать, есть ли какой-либо конкретный блок следует проверить позже.

Serialize

jQuery также имеет метод сериализации, который будет поддерживать состояние элементов управления формы. Например, пример, представленный на веб-сайте jQuery, следующий:

single=Single2&multiple=Multiple&multiple=Multiple3&check=check2&radio=radio2

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

Ответ 3

Вы можете пропустить все флажки, написав $(':checkbox').each(...).

Если я правильно понял ваш вопрос, вы ищете следующий код:

var str = "";

$(':checkbox').each(function() {
    str += this.checked ? "1," : "0,";
});

str = str.substr(0, str.length - 1);    //Remove the trailing comma

Этот код будет проходить через все флажки и добавлять в строку 1, или 0,.

Ответ 4

Я не думаю, что достаточно времени было уделено внимание соображениям схемы, поднятым в исходном посте. Итак, вот что нужно учитывать для любых новичков.

Скажем, вы пошли дальше и построили это решение. Все ваши персональные значения объединены в одно значение и сохраняются в базе данных. Вы действительно сохраняете [небольшое] пространство в своей базе данных и некоторое время кодирования.

Теперь рассмотрим, что вы должны выполнить частую и легкую задачу добавления нового флажка между текущими флажками 3 и 4. Менеджер по развитию, клиент, независимо от того, что ожидает, что это будет простое изменение.

Итак, вы добавляете флажок в пользовательский интерфейс (легкая часть). Ваш код цикла уже будет конкатенировать значения независимо от количества флажков. Вы также считаете, что поле вашей базы данных является только varchar или другим строковым типом, поэтому оно также должно быть прекрасным.

Что происходит, когда клиенты или вы пытаетесь просмотреть данные до изменения? Вы по существу сериализуете слева направо. Однако теперь значения после 3 всех отключены на 1 символ. Что вы собираетесь делать со всеми вашими существующими данными? Вы собираетесь написать приложение, вытащить все обратно из базы данных, обработать его, чтобы добавить значение по умолчанию для новой позиции вопроса, а затем сохранить все это обратно в базе данных? Что происходит, когда у вас несколько новых значений раз в неделю или месяц? Что делать, если вы перемещаете местоположения, а jQuery обрабатывает их в другом порядке? Все ваши данные задвинуты и должны быть повторно обработаны, чтобы переупорядочить его.

Вся концепция НЕ, обеспечивающая жесткую связь ключевого значения, - это ludacris и приведет к тому, что вы попадете в неприятности раньше, чем позже. Для тех из вас, кто это рассматривает, не делайте этого. Другие предложения по изменению схемы прекрасны. Используйте дочернюю таблицу, больше полей в главной таблице, таблицу вопросов и т.д. Просто не храните немаркированные данные, когда структура этих данных может быть изменена.

Ответ 6

$.extend($.expr[':'], {
        unchecked: function (obj) {
            return ((obj.type == 'checkbox' || obj.type == 'radio') && !$(obj).is(':checked'));
        }
    });

$("input:checked")
$("input:unchecked")