Использование полей выбора, предложенных Энди, не обязательно является наилучшим вариантом для взаимодействия с пользователем, поскольку для этого требуется два щелчка мышью вместо одного.
Более того, «Выбрать» использует гораздо больше места в пользовательском интерфейсе, чем флажок.
Ответ Эша - простое решение, но не работает в случае полей массива .
В моем контексте у меня есть форма переменной длины, которая содержит строки, отображающие сочетание текста и полей флажков:
<input type="checkbox" value="1" name="thisIsAChkArray[]"/>
<input type="text" value="" name="thisIsATxtArray[]"/>
Для декодирования публикуемых данных порядок элементов массива имеет важное значение.Простое добавление непроверенных элементов в обычную сериализацию Jquery не сохраняет порядок элементов строки.
Вот предлагаемое решение, основанное на ответе Эша:
(function($) {
$.fn.serializeWithChkBox = function() {
// perform a serialize form the non-checkbox fields
var values = $(this).find('select')
.add( $(this).find('input[type!=checkbox]') )
.serialize();
// add values for checked and unchecked checkboxes fields
$(this).find('input[type=checkbox]').each(function() {
var chkVal = $(this).is(':checked') ? $(this).val() : "0";
values += "&" + $(this).attr('name') + "=" + chkVal;
});
return values;
}
})(jQuery);