Jquery - флажок SerializeArray (), который не «отмечен» - PullRequest
2 голосов
/ 09 сентября 2011

, поэтому я пытаюсь реализовать метод Jquery .serializeArray () для преобразования формы в строку JSON для отправки ее в запросе.Это прекрасно работает для моей формы, за исключением флажков и переключателей.Единственный раз, когда это работает правильно, это когда они проверены.Иногда мне нужно знать, если они не проверены.Они все еще должны быть сериализованы.

Полагаю, я мог бы вручную перебрать форму, получить значения и построить объект JSON, но это не было бы оптимальным.

Согласно документации Jquery, найденной здесь: Документы Jquery все, что соответствует стандартам W3 для успешного контроля , найденное здесь , должно быть включено.К сожалению, это не включает флажки, которые не отмечены.У кого-нибудь есть способ обойти это поведение?Заранее спасибо ...


var form = document.getElementById('f');
console.log($(form).serializeArray();

Это выплевывает сериализованную форму с флажками, которые не отмечены, исключены ...

Ответы [ 4 ]

3 голосов
/ 09 сентября 2011

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

2 голосов
/ 18 сентября 2014

Альтернативой может быть использование плагина jQuery. Например, serializeJSON имеет возможность установить значение для непроверенных флажков следующим образом:

$('form').serializeJSON({checkboxUncheckedValue: "false"});

В любом случае обычно лучше использовать скрытые входы для непроверенных значений.

2 голосов
/ 17 октября 2013

как насчет того, чтобы попробовать это, у меня была похожая проблема, я думал, что непроверенные флажки также должны иметь значение, вот быстрый способ обойти, добавить дополнительный класс на каждый флажок в вашей форме "cbx" сделать данные массивом изформа с serialise

, затем переберите все флажки с классом «cbx» и добавьте их в массив со значением 0, ПОСЛЕ ТОГО, КАК массив создан с (serializeArray ())

когда вы публикуете данные, вы увидите непроверенные чекбоксы и значения 0 будут переданы вместе с постом.

    var data = $('#form').serializeArray();

    $(".cbx:not(:checked)").each(function() {
        data.push({name: this.name, value: '0' });
    });

    $.post("testpage.asp", data);
0 голосов
/ 12 сентября 2011

Хорошо, поэтому я разработал обходной путь.

В основном я написал функцию для сравнения исходного объекта JSON с сериализованной формой.Проходя через петлю, я сравнил компоненты.Если было несоответствие, я извлекал компонент из формы и вручную вставлял его в JSON.Я использовал метод array.splice(), чтобы добавить недостающие компоненты.Работал для всех недостающих входов.

...