Существует ли простой однострочный способ получения данных формы, как это было бы, если бы они были представлены классическим способом только для HTML?
Например:
<form>
<input type="radio" name="foo" value="1" checked="checked" />
<input type="radio" name="foo" value="0" />
<input name="bar" value="xxx" />
<select name="this">
<option value="hi" selected="selected">Hi</option>
<option value="ho">Ho</option>
</form>
Вывод:
{
"foo": "1",
"bar": "xxx",
"this": "hi"
}
Нечто подобное слишком простое, поскольку оно не включает (правильно) текстовые области, селекторы, переключатели и флажки:
$("#form input").each(function () {
data[theFieldName] = theFieldValue;
});
javascript
jquery
forms
Барт ван Хейкелом
источник
источник
Ответы:
демонстрация
источник
_.object($("#myform").serializeArray().map(function(v) {return [v.name, v.value];} ))
Использование
$('form').serializeArray()
, которое возвращает массив :Другой вариант
$('form').serialize()
, который возвращает строку :Посмотрите на это демо jsfiddle
источник
serializeArray
было бы намного полезнее, если бы он возвращал объект с парами ключ-значениеname="multiple[]"
не работают. Решение для метода POST такое же, просто используйте $ ('form'). Serialize (). Кроме того, метод POST не имеет ограничения в 2000 символов, как GET в большинстве браузеров, поэтому может использоваться даже для довольно больших данных.name
атрибут.Обновленный ответ за 2014 год: HTML5 FormData делает это
Затем вы можете опубликовать formData точно так, как он есть - он содержит все имена и значения, используемые в форме.
источник
entries()
метод [страница MDN ].На основании
jQuery.serializeArray
возвращает пары ключ-значение.источник
Это глупый ответ, но позвольте мне объяснить, почему это лучшее решение:
Мы правильно обрабатываем отправку формы, а не нажатие кнопки. Некоторые люди любят нажимать ввод на полях. Некоторые люди используют альтернативные устройства ввода, такие как речевой ввод или другие устройства доступа. Обработка формы отправки и вы правильно решите ее для всех.
Мы копаем данные формы для фактической формы, которая была отправлена. Если вы измените селектор формы позже, вам не нужно менять селекторы для всех полей. Кроме того, у вас может быть несколько форм с одинаковыми именами ввода. Не нужно устранять неоднозначность с избыточными идентификаторами, а что нет, просто отслеживайте входные данные на основе формы, которая была отправлена. Это также позволяет вам использовать один обработчик событий для нескольких форм, если это подходит для вашей ситуации.
Интерфейс FormData довольно новый, но хорошо поддерживается браузерами. Это отличный способ создать этот сбор данных, чтобы получить реальные значения формы. Без этого вам придется пройтись по всем элементам (например, с помощью
form.elements
) и выяснить, что проверено, а что нет, какие значения и т. Д. Вполне возможно, если вам нужна поддержка старого браузера, но FormData Интерфейс проще.Я использую ES6 здесь ... ни в коем случае не требуется, поэтому измените его обратно на ES5-совместимый, если вам нужна поддержка старого браузера.
источник
formData.entries()
.formData.foo
не определено. Как видно из вашего ответа,.get()
необходимо призвать к тому, что я считаю неудобным. Может быть, «не разоблачить» наткнулся на неправильный путь. Итак, чтобы сгенерировать что-то похожее{ foo: 'bar' }
наsubmit
событие, вам нужно выполнить итерации по ним вручную. Отсюда. To get a plain object from it, see [link]
.xhr.send(formData);
JSON.stringify([...formData])
Или, если вы хотите, чтобы ваши ключи / значения были отдельными ...[...formData].reduce((prev, cur) => { prev[cur[0]] = cur[1]; return prev;}, {})
используйте .serializeArray (), чтобы получить данные в формате массива, а затем преобразовать их в объект:
источник
<input type="checkbox" name="someList" value="one" /> <input type="checkbox" name="someList" value="two" />
. Если оба отмечены, объект содержит только второе значение флажка.someList
должно бытьtype="radio"
?name:value
Вот действительно простой и короткий солутон, который даже не требует Jquery.
источник
postData
.Это 2019 год, и есть лучший способ сделать это:
или если вы хотите простой объект вместо
хотя имейте в виду, что это не будет работать с дублирующимися ключами, как вы получаете из множественных флажков и дубликатов флажков с тем же именем.
источник
document.getElementsByClassName
и для цикла , но эй, еще лучше , чем требует JQuery и т.д.document.querySelector
а не простоquerySelector
.источник
кроме этого, вы можете посмотреть на serialize () ;
источник
Я использую это:
Плагин jQuery
HTML-форма
Получить данные
источник
Array
Вот рабочая реализация только для JavaScript, которая корректно обрабатывает флажки, переключатели и ползунки (возможно, и другие типы ввода, но я только проверял их).
Рабочий пример:
редактировать:
Если вы ищете более полную реализацию, взгляните на этот раздел проекта, для которого я сделал это . Я обновлю этот вопрос в конце концов с полным решением, которое я придумал, но, возможно, это будет кому-то полезно.
источник
Если вы используете jQuery, вот небольшая функция, которая сделает то, что вы ищете.
Сначала добавьте в форму идентификатор (если это не единственная форма на странице, тогда вы можете просто использовать «форму» в качестве запроса DOM)
Вывод будет выглядеть так:
источник
Вы также можете использовать объекты FormData ; Объект FormData позволяет вам скомпилировать набор пар ключ / значение для отправки с использованием XMLHttpRequest. Он в первую очередь предназначен для использования при отправке данных формы, но может использоваться независимо от форм для передачи ключевых данных.
источник
Это добавит все поля формы к объекту JavaScript "res":
источник
Я включил ответ, чтобы также вернуть требуемый объект.
источник
foo[bar][] = 'qux'
следует сериализовать в{ foo: { bar: [ 'qux' ] } }
.Основываясь на ответе нейрона, я создал простой метод JQuery, который получает данные формы в парах ключ-значение, но работает для множественного выбора и для входных данных массива с именем = 'example []'.
Вот как это используется:
Вы можете найти пример ниже его определения и как это работает.
источник
источник
источник
Вы можете использовать эту функцию для получения объекта или JSON из формы.
для его использования:
источник
Я написал библиотеку для решения этой самой проблемы: JSONForms . Он принимает форму, проходит через каждый ввод и создает объект JSON, который вы можете легко прочитать.
Скажем, у вас есть следующая форма:
Передача формы в метод кодирования JSONForms возвращает вам следующий объект:
Вот демонстрация с вашей формой.
источник
Codepen
источник
Для тех из вас, кто предпочел бы,
Object
а не сериализованную строку (например, возвращаемую$(form).serialize()
и с небольшим улучшением$(form).serializeArray()
), не стесняйтесь использовать код ниже:Чтобы выполнить его, просто используйте,
Form.serialize(form)
и функция вернет нечтоObject
подобное:В качестве бонуса это означает, что вам не нужно устанавливать весь пакет jQuery только для одной функции сериализации.
источник
Я написал функцию, которая заботится о нескольких флажках и множественном выборе. В этих случаях он возвращает массив.
источник
отображение полей элемента формы и входного файла для отправки формы без обновления страницы и получения всех значений с помощью файла, включите в него вот оно
источник
Это решит проблему: не мог работать с множественным выбором.
источник
Вы все не совсем правы. Вы не можете написать:
Потому что таким образом, если у вас есть список множественного выбора - его значения будут перезаписаны последним, поскольку он передается как: «param1»: «value1», «param1»: «value2».
Итак, правильный подход это:
источник
Этот метод должен сделать это. Он сериализует данные формы, а затем преобразует их в объект. Также заботится о группах флажков.
источник
name
атрибут.Вот хорошая ванильная JS-функция, которую я написал для извлечения данных формы в виде объекта. Также есть опции для вставки дополнений в объект и для очистки полей ввода формы.
Вот пример его использования с почтовым запросом:
источник