¿Se pregunta si hay una función en javascript sin jquery o cualquier marco que me permita serializar el formulario y acceder a la versión serializada?
javascript
forms
serialization
RussellHarrower
fuente
fuente
Respuestas:
La biblioteca en miniatura de serialización no se basa en un marco. Aparte de algo así, deberá implementar la función de serialización usted mismo. (aunque con un peso de 1.2 kilobytes, ¿por qué no usarlo?)
fuente
case 'email':
en la sección de entrada del códigoThat's an error
Aquí hay un enfoque de JavaScript puro:
Aunque parece estar funcionando solo para solicitudes POST.
https://developer.mozilla.org/en-US/docs/Web/API/FormData
fuente
req.open("POST", "<your-url>");
antes.req.send(data);
De lo contrario, tuve el errorInvalidStateError: XMLHttpRequest state must be OPENED.
en Firefox 66. Debería funcionar con otras solicitudes también como PUT si reemplaza POST con PUT.Solo para navegadores modernos
Si apunta a navegadores que admiten la
URLSearchParams
API ( navegadores más recientes ) y elFormData(formElement)
constructor ( navegadores más recientes, excepto Edge ), use esto:En todas partes excepto IE
Para los navegadores que admiten
URLSearchParams
pero no elFormData(formElement)
constructor, use este polyfill FormData y este código (funciona en todas partes excepto IE):Ejemplo
Mostrar fragmento de código
Compatible con IE 10
Para navegadores incluso más antiguos (por ejemplo, IE 10), use el polyfill FormData , un
Array.from
polyfill si es necesario y este código:fuente
.toString()
realmente necesario aquí?URLSearchParams
, entonces sí. La conversión de cadenas también ocurre implícitamente si la interpola o agrega a una cadena, en cuyo caso latoString
llamada explícita no es necesaria.new FormData(formElement)
todavía no se admite allí?Fuente: http://code.google.com/p/form-serialize/source/browse/trunk/serialize-0.1.js
fuente
Aquí hay una versión ligeramente modificada de TibTibs ':
Los campos deshabilitados se descartan y los nombres también se codifican en URL. La sustitución de expresiones regulares de% 20 caracteres se realiza solo una vez, antes de devolver la cadena.
La cadena de consulta tiene una forma idéntica al resultado del método $ .serialize () de jQuery.
fuente
form.nodeName.toLowerCase() == "form"
lugar deform.nodeName == "FORM"
Comencé con la respuesta de Johndave Decano.
Esto debería solucionar algunos de los problemas mencionados en las respuestas a su función.
Los tipos de botones seguirán siendo ignorados si no tienen un valor de nombre.
Así es como estoy usando actualmente esta función.
fuente
Si necesita enviar el formulario "myForm" utilizando POST en formato json, puede hacer lo siguiente:
La segunda línea se convierte de una matriz como:
... en un objeto regular, como:
... realiza esta conversión pasando un mapFn a Array.from (). Este mapFn se aplica a cada par ["a", "b"] y los convierte en {"a": "b"} para que la matriz contenga muchos objetos con una sola propiedad en cada uno. MapFn está usando "desestructuración" para obtener nombres de la primera y segunda parte del par, y también está usando un "ComputedPropertyName" ES6 para establecer el nombre de propiedad en el objeto devuelto por mapFn (esta es la razón por la que dice "[ x]: algo "en lugar de simplemente" x: algo ".
Todos estos objetos de propiedad única se pasan a los argumentos de la función Object.assign () que combina todos los objetos de propiedad única en un solo objeto que tiene todas las propiedades.
Array.from (): https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from
Desestructuración en parámetros: https://simonsmith.io/destructuring-objects-as-function-parameters-in-es6/
Más información sobre los nombres de propiedades calculadas aquí: ¿ Variable como el nombre de propiedad en un objeto literal de JavaScript?
fuente
Funciona en todos los navegadores.
fuente
Para usar así:
Espero haberte ayudado.
fuente
Si está buscando serializar las entradas en un evento. Aquí hay un enfoque de JavaScript puro que uso.
Los datos serán un objeto JavaScript de las entradas.
fuente
Una versión refactorizada del código de @SimonSteinberger usando menos variables y aprovechando la velocidad de los
forEach
bucles (que son un poco más rápidos quefor
s)fuente
Refactivé la respuesta de TibTibs en algo que es mucho más claro de leer. Es un poco más largo debido al ancho de 80 caracteres y algunos comentarios.
Además, ignora los nombres de campo en blanco y los valores en blanco.
fuente
evt = evt || window.event || { target: null };
(como lo ha hecho la edición) El punto detrás de esto es pasar el evento que desencadenó la serialización, si hay una, como un formulario evento "enviar" o "clic" de un botón. Si un formulario tiene varios botones para enviar, solo desea tener en cuenta el valor del botón que activó el evento e ignorar los demás. He pirateado un ejemplo muy rudimentario de este comportamiento en dump.bedmonds.net/serialize-jsfuente
Tomé el método de entradas () de formData de @moison answer y de MDN se dice que:
pero el único problema es que el navegador móvil (Android y Safari no son compatibles) y el escritorio IE y Safari también
pero básicamente aquí está mi enfoque:
el código se puede encontrar aquí
fuente
El uso de la función de reducción de JavaScript debería ser un truco para todos los navegadores, incluido IE9>:
Ejemplo en vivo abajo.
Mostrar fragmento de código
fuente
Espero que esto funcione
fuente
Mejorando la respuesta de David Lemon.
Esto convierte los datos del formulario a JSON y le permite configurar el formulario desde un objeto de datos.
fuente
Esto podría hacerse mediante una función muy simple como sigue
fuente
Aquí hay un enfoque de JavaScript puro:
fuente
fuente
Para fines de depuración, esto podría ayudarlo a:
fuente
Podría estar loco, pero estoy encontrando estas respuestas muy hinchadas. Aquí está mi solución.
fuente
select
, y todo