Я использую jQuery.serialize для получения всех полей данных в форме.
Моя проблема состоит в том, что это не делает retriev флажков, который не проверяется.
Это включает это:
<input type="checkbox" id="event_allDay" name="event_allDay" class="checkbox" checked="checked" />
но не это
<input type="checkbox" id="event_allDay" name="event_allDay" class="checkbox" />
Как я могу получить "значения" флажков, который не проверяется?
jQuery serialize
точно имитирует то, как стандартная форма будет сериализована браузером перед добавлением к строке запроса или телу POST в запросе. Неотмеченные флажки не включаются браузером, что действительно имеет смысл, потому что они имеют логическое состояние - они либо выбраны пользователем (включены), либо не выбраны пользователем (не включены).
Если вам нужно, чтобы он был в сериализованном виде, вы должны спросить себя: «Почему? Почему бы просто не проверить его наличие в данных?».
Имейте в виду, что если способ сериализации данных формы в JavaScript отличается от того, как это делает браузер, то вы исключаете любую возможность постепенного ухудшения качества формы. Если вам все еще необходимо это сделать, просто используйте поле
с вариантами Да / Нет. По крайней мере, тогда пользователи с отключенным JS не отчуждаются от вашего сайта, и вы не идете против поведения, определенного в спецификации HTML.
<select id="event_allDay" name="event_allDay">
<option value="0" selected>No</option>
<option value="1">Yes</option>
</select>
Я видел, как это применялось на некоторых сайтах в прошлом, и всегда думал «почему бы им просто не использовать флажок» ?
Нет, так как сериализация предназначена для использования в качестве строки запроса, и в этом контексте отсутствие отметки означает, что ее нет в строке запроса вообще.
Если вы действительно хотите получить значения снятых флажков, используйте: (не проверено, конечно)
var arr_unchecked_values = $('input[type=checkbox]:not(:checked)').map(function(){return this.value}).get();
если вы хотите добавить несериализованные флажки в строку запроса, добавьте следующее в функцию jquery submit:
var moreinfo = '';
$('input[type=checkbox]').each(function() {
if (!this.checked) {
moreinfo += '&'+this.name+'=0';
}
});