У меня есть форма со многими полями ввода.
Когда я ловлю событие отправки формы с помощью jQuery, возможно ли получить все поля ввода этой формы в ассоциативном массиве?
javascript
jquery
Васил
источник
источник
Ответы:
Благодаря совету от Simon_Weaver, вот еще один способ сделать это, используя
serializeArray
:Обратите внимание, что этот фрагмент не будет работать с
<select multiple>
элементами.Похоже, что новые вводы формы HTML 5 не работают
serializeArray
в jQuery версии 1.3. Это работает в версии 1.4+источник
name
иvalue
. Лучшим решением может быть обработка вывода из serializeArray в любой требуемый формат.<select>
элементов? Я пытался,var $inputs = $('#new-ticket :input, :select');
но это не работает. Кто-нибудь знает правильный способ сделать это, потому что я не думаю, что я делаю это правильно.$("#new-ticket :input, #new-ticket :select")
, или даже лучше,$(":input, :select", "#new-ticket")
Опоздал на вечеринку по этому вопросу, но это еще проще
источник
.serialize()
( api.jquery.com/serialize ) помещает все элементы формы в одну строку, готовую для добавления к URL-адресу в строке запроса, по существу имитируя запрос формы GET. Это не будет достигать того, что дает ответ Никфа..serialize()
также работает только с элементами формы. Так$('form select').serialize()
будет сериализовать данные только для избранных.$('#myForm')
используйте $ (это).Jquery.form плагин может помочь с тем, что другие ищут , что в конечном итоге на этот вопрос. Я не уверен, что он делает то, что вы хотите, или нет.
Также есть функция serializeArray .
источник
Иногда я нахожу получение по одному более полезным. Для этого есть вот что:
источник
[0].value
к этому, т.е.$(...)[0].value;
дал мне значение ввода напрямую, спасибо!Переменная elements будет содержать все входные данные, select, textareas и fieldsets внутри формы.
источник
Вот еще одно решение, таким образом, вы можете получить все данные о форме и использовать их в вызове сервера или что-то еще.
Затем вы можете использовать это с вызовами ajax:
Надеюсь, это пригодится любому из вас :)
источник
У меня была похожая проблема с легким поворотом, и я решил выбросить это. У меня есть функция обратного вызова, которая получает форму, поэтому у меня уже был объект формы, и я не смогла выполнить простые варианты
$('form:input')
. Вместо этого я придумал:Схожая, но не идентичная ситуация, но я нашел эту тему очень полезной и подумал, что я подправлю ее в конце, и надеюсь, что кто-то еще нашел ее полезной.
источник
Ассоциативный? Не без труда, но вы можете использовать универсальные селекторы:
источник
В jQuery
serializeArray
нет отключенных полей, поэтому, если они вам тоже нужны, попробуйте:источник
http://api.jquery.com/serializearray/
Это также можно сделать без jQuery, используя объект FormData уровня 2 XMLHttpRequest
http://www.w3.org/TR/2010/WD-XMLHttpRequest2-20100907/#the-formdata-interface
источник
Не забудьте флажки и переключатели -
источник
Этот кусок кода будет работать вместо имени, адрес электронной почты введите имя поля формы
источник
Кажется странным, что никто не проголосовал и не предложил краткое решение для получения списка данных. Вряд ли какие-либо формы будут объектами одного измерения.
Недостатком этого решения, конечно, является то, что ваши одноэлементные объекты должны быть доступны по индексу [0]. Но IMO это намного лучше, чем использовать одно из решений для построения карт из десятка строк.
источник
У меня была та же проблема, и я решил ее по-другому.
Возвращает значение всех полей ввода. Вы можете изменить,
$(':input')
чтобы быть более конкретным.источник
То же решение, что и для nickf , но с учетом входных имен массива, например
<input type="text" name="array[]" />
источник
Если вам нужно получить несколько значений из входных данных, и вы используете [] для определения входных данных с несколькими значениями, вы можете использовать следующее:
источник
Это мое любимое решение, вдохновленное ответами Лэнса Рашинга и Simon_Weaver .
Вывод представляет собой массив объектов, например
С кодом ниже,
его окончательный результат будет
источник
Я использую этот код без каждого цикла:
источник
Я надеюсь, что это полезно, а также самый простой.
источник
Когда мне нужно было выполнить ajax-вызов со всеми полями формы, у меня возникли проблемы с селектором : input , возвращающим все флажки независимо от того, были ли они отмечены. Я добавил новый селектор, чтобы просто получить отправляемые элементы формы:
Применение:
Я еще не тестировал его с несколькими полями выбора, но он работает для получения всех полей формы так, как это делает стандартная отправка.
Я использовал это при настройке параметров продукта на сайте OpenCart, чтобы включить флажки и текстовые поля, а также стандартный тип блока выбора.
источник
serialize () - лучший метод. @ Кристофер Паркер (Christopher Parker) говорит, что Nickf's anwser выполняет больше, однако он не принимает во внимание, что форма может содержать текстовую область и выбирать меню. Гораздо лучше использовать serialize (), а затем манипулировать этим по мере необходимости. Данные из serialize () могут быть использованы как в Ajax-посте, так и в get, поэтому здесь нет проблем.
источник
Надеюсь, это кому-нибудь поможет. :)
источник
Все ответы хороши, но есть ли поле, которое вы хотели бы игнорировать в этой функции? Просто дайте полю свойство, например ignore_this:
И в вашей функции сериализации:
Вот так вы игнорируете некоторые поля.
источник
$('.mandatory');
и!$('.mandatory');
ignore_this
чтобыdata-ignore-this="true"
вместо того , чтобы создавать свои собственные атрибуты , которые не проверяют wПопробуйте следующий код:
источник
Для нескольких элементов select (
<select multiple="multiple">
) я изменил решение @Jason Norwood-Young, чтобы оно заработало.Ответ (в том виде, в котором он был опубликован) берет значение только из первого выбранного элемента, а не из всех . Он также не инициализировал и не возвращал
data
, первый выдает ошибку JavaScript.Вот новая версия:
Применение:
Примечание. Вам просто нужно убедиться, что
name
выбранный вами элемент[]
добавлен в конец, например:источник
источник