Хотите знать, есть ли функция в javascript без jquery или какой-либо инфраструктуры, которая позволяет мне сериализовать форму и получить доступ к сериализованной версии?
javascript
forms
serialization
RussellHarrower
источник
источник
Ответы:
Миниатюрная библиотека from-serialize не зависит от фреймворка. В остальном вам нужно реализовать функцию сериализации самостоятельно. (хотя при весе 1,2 килобайта, почему бы не использовать его?)
источник
case 'email':
в раздел ввода кодаThat's an error
Вот чистый подход JavaScript:
Хотя, похоже, он работает только для POST-запросов.
https://developer.mozilla.org/en-US/docs/Web/API/FormData
источник
req.open("POST", "<your-url>");
до того, как вreq.send(data);
противном случае у меня возникла ошибкаInvalidStateError: XMLHttpRequest state must be OPENED.
в Firefox 66. Он должен работать с другими запросами, такими как PUT, если вы заменяете POST на PUT.Только для современных браузеров
Если вы нацелены на браузеры, которые поддерживают
URLSearchParams
API ( самые последние браузеры ) иFormData(formElement)
конструктор ( самые последние браузеры, кроме Edge ), используйте это:Везде, кроме IE
Для браузеров, которые поддерживают,
URLSearchParams
но неFormData(formElement)
конструктор, используйте этот polyfill FormData и этот код (работает везде, кроме IE):пример
Показать фрагмент кода
Совместим с IE 10
Для более старых браузеров (например, IE 10) используйте полифилл FormData ,
Array.from
полифилл при необходимости и этот код:источник
.toString()
действительно нужно?URLSearchParams
, то да. Строковое преобразование также происходит неявно, если вы интерполируете или добавляете его в строку, и в этом случае явныйtoString
вызов не требуется.new FormData(formElement)
, там еще не поддерживается?Источник: http://code.google.com/p/form-serialize/source/browse/trunk/serialize-0.1.js
источник
Вот немного измененная версия TibTibs:
Отключенные поля отбрасываются, а имена также кодируются URL. Regex замена% 20 символов происходит только один раз, прежде чем вернуть строку.
Строка запроса имеет ту же форму, что и результат метода $ .serialize () jQuery.
источник
form.nodeName.toLowerCase() == "form"
вместоform.nodeName == "FORM"
Я начал с ответа от Johndave Decano.
Это должно исправить некоторые из проблем, упомянутых в ответах на его функции.
Типы кнопок будут по-прежнему игнорироваться, если они не имеют значения имени.
Вот как я сейчас использую эту функцию.
источник
Если вам нужно отправить форму "myForm", используя POST в формате json, вы можете сделать:
Вторая строка преобразует из массива, как:
... в обычный объект, как:
... он выполняет это преобразование, передавая mapFn в Array.from (). Этот mapFn применяется к каждой паре ["a", "b"] и преобразует их в {"a": "b"}, так что массив содержит множество объектов с только одним свойством в каждой. MapFn использует «деструктурирование» для получения имен первой и второй частей пары, а также ES6 «ComputedPropertyName» для установки имени свойства в объекте, возвращаемом mapFn (поэтому и говорится «[ х]: что-то ", а не просто" х: что-то ".
Все эти объекты одного свойства затем передаются в аргументы функции Object.assign (), которая объединяет все объекты одного свойства в один объект, имеющий все свойства.
Array.from (): https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from
Разрушение в параметрах: https://simonsmith.io/destructuring-objects-as-function-parameters-in-es6/
Подробнее об именах вычисляемых свойств здесь: Переменная как имя свойства в литерале объекта JavaScript?
источник
Работает во всех браузерах.
источник
Чтобы использовать как это:
Я надеюсь, что помог.
источник
Если вы хотите сериализовать входы для события. Вот чистый подход JavaScript, который я использую.
Данные будут JavaScript-объектом ввода.
источник
Реорганизованная версия кода @ SimonSteinberger, использующая меньше переменных и использующая преимущества скорости
forEach
циклов (которые немного быстрее, чемfor
s)источник
Я переработал ответ TibTibs в нечто, что намного понятнее для чтения. Это немного длиннее из-за ширины в 80 символов и нескольких комментариев.
Кроме того, он игнорирует пустые имена полей и пустые значения.
источник
evt = evt || window.event || { target: null };
(как редактирование). Смысл в том, чтобы передать событие, которое вызвало сериализацию, если оно есть, такое как форма событие «отправить» или «нажатие» кнопки. Если форма имеет несколько кнопок для отправки, вам нужно учитывать только значение кнопки, которая вызвала событие, и игнорировать остальные. Я взломал очень простойисточник
Я взял метод entry () для formData из @moison answer и из MDN сказано, что:
но единственная проблема заключается в том, что мобильный браузер (Android и Safari не поддерживаются), а также IE и Safari Desktop
но в основном вот мой подход:
код можно найти здесь
источник
Использование функции JavaScript JavaScript должно помочь всем браузерам, включая IE9>:
Живой пример ниже.
Показать фрагмент кода
источник
Надеюсь это сработает
источник
Улучшение ответа Дэвида Лемона.
Это преобразует данные формы в JSON и позволяет вам установить форму из объекта данных.
источник
Это может быть сделано очень простой функцией следующим образом
источник
Вот чистый подход JavaScript:
источник
источник
В целях отладки это может помочь вам:
источник
Я могу быть сумасшедшим, но я нахожу эти ответы серьезно раздутыми. Вот мое решение
источник
select
, и все