Tengo un formulario con muchos campos de entrada.
Cuando capturo el evento de envío de formulario con jQuery, ¿es posible obtener todos los campos de entrada de ese formulario en una matriz asociativa?
javascript
jquery
Vasil
fuente
fuente
Respuestas:
Gracias al consejo de Simon_Weaver, aquí hay otra forma de hacerlo, usando
serializeArray
:Tenga en cuenta que este fragmento fallará en los
<select multiple>
elementos.Parece que las nuevas entradas de formulario HTML 5 no funcionan con
serializeArray
jQuery versión 1.3. Esto funciona en la versión 1.4+fuente
name
yvalue
. Una mejor solución podría ser procesar la salida de serializeArray en el formato requerido.<select>
elementos? Lo intentévar $inputs = $('#new-ticket :input, :select');
pero eso no funciona. ¿Alguien sabe la forma correcta de hacer esto porque no creo que lo esté haciendo bien?$("#new-ticket :input, #new-ticket :select")
, o incluso mejor,$(":input, :select", "#new-ticket")
Tarde a la fiesta en esta pregunta, pero esto es aún más fácil:
fuente
.serialize()
( api.jquery.com/serialize ) coloca todos los elementos del formulario en una sola cadena lista para agregar a una URL en una cadena de consulta, esencialmente imitando una solicitud de formulario GET. Esto no lograría lo que logra la respuesta de nickf..serialize()
también funciona solo con elementos de formulario. Por$('form select').serialize()
lo tanto , serializará los datos solo para las selecciones.$('#myForm')
, use $ (this).El complemento jquery.form puede ayudar con lo que otros buscan y que terminan en esta pregunta. No estoy seguro de si hace directamente lo que quieres o no.
También existe la función serializeArray .
fuente
A veces encuentro que obtener uno a la vez es más útil. Para eso, hay esto:
fuente
[0].value
esto, es decir,$(...)[0].value;
me dio el valor de la entrada directamente, ¡gracias!La variable de elementos contendrá todas las entradas, selecciones, áreas de texto y conjuntos de campos dentro del formulario.
fuente
Aquí hay otra solución, de esta manera puede obtener todos los datos sobre el formulario y usarlo en una llamada del servidor o algo así.
Luego puede usar esto con llamadas ajax:
Espero que esto sea de utilidad para cualquiera de ustedes :)
fuente
Tuve un problema similar con un ligero giro y pensé en tirar esto. Tengo una función de devolución de llamada que obtiene el formulario, por lo que ya tenía un objeto de formulario y no podía tener variantes fáciles
$('form:input')
. En cambio, se me ocurrió:Es una situación similar pero no idéntica, pero este hilo me pareció muy útil y pensé en meterlo al final y esperar que alguien más lo encontrara útil.
fuente
¿De asociación? No sin un poco de trabajo, pero puede usar selectores genéricos:
fuente
jQuery's
serializeArray
no incluye campos deshabilitados, así que si los necesita también, intente:fuente
http://api.jquery.com/serializearray/
Esto también se puede hacer sin jQuery utilizando el objeto XMLHttpRequest Level 2 FormData
http://www.w3.org/TR/2010/WD-XMLHttpRequest2-20100907/#the-formdata-interface
fuente
No olvide las casillas de verificación y los botones de opción.
fuente
Este código funcionará en lugar del nombre, ingrese por correo electrónico el nombre de los campos de su formulario
fuente
Parece extraño que nadie haya votado o propuesto una solución concisa para obtener datos de la lista. Casi ninguna forma será un objeto unidimensional.
La desventaja de esta solución es, por supuesto, que tendrá que acceder a sus objetos singleton en el índice [0]. Pero IMO es mucho mejor que usar una de las soluciones de mapeo de docenas de líneas.
fuente
Tuve el mismo problema y lo resolví de una manera diferente.
Devuelve el valor de todos los campos de entrada. Podrías cambiar el
$(':input')
para ser más específico.fuente
La misma solución dada por nickf , pero teniendo en cuenta los nombres de entrada de matriz, por ejemplo
<input type="text" name="array[]" />
fuente
Si necesita obtener múltiples valores de las entradas y está usando [] 's para definir las entradas con múltiples valores, puede usar lo siguiente:
fuente
Inspirado por las respuestas de Lance Rushing y Simon_Weaver , esta es mi solución favorita.
La salida es una matriz de objetos, p. Ej.
Con el siguiente código,
su salida final sería
fuente
Estoy usando este código sin cada bucle:
fuente
Espero que esto sea útil, así como el más fácil.
fuente
Cuando necesitaba hacer una llamada ajax con todos los campos del formulario, tuve problemas con el : selector de entrada que devuelve todas las casillas de verificación, estén o no marcadas. Agregué un nuevo selector para obtener los elementos de formulario que se pueden enviar:
uso:
Sin embargo, aún no lo he probado con varios cuadros de selección, pero funciona para obtener todos los campos de formulario de la forma en que lo haría un envío estándar.
Lo utilicé al personalizar las opciones del producto en un sitio de OpenCart para incluir casillas de verificación y campos de texto, así como el tipo de cuadro de selección estándar.
fuente
serialize () es el mejor método. @ Christopher Parker dice que la respuesta de Nickf logra más, sin embargo, no tiene en cuenta que el formulario puede contener área de texto y menús seleccionados. Es mucho mejor usar serialize () y luego manipular eso como sea necesario. Los datos de serialize () se pueden usar en una publicación de Ajax o get, por lo que no hay ningún problema allí.
fuente
Espero que esto ayude a alguien. :)
fuente
Todas las respuestas son buenas, pero si hay un campo que le gustaría ignorar en esa función. Fácil, dele al campo una propiedad, por ejemplo ignore_this:
Y en su función de serialización:
Así es como ignoras algunos campos.
fuente
$('.mandatory');
y!$('.mandatory');
ignore_this
a endata-ignore-this="true"
lugar de crear sus propios atributos que no validen w3cPrueba el siguiente código:
fuente
Para múltiples elementos seleccionados (
<select multiple="multiple">
), modifiqué la solución de @Jason Norwood-Young para que funcione.La respuesta (tal como se publicó) solo toma el valor del primer elemento que se seleccionó, no todos . Tampoco se inicializó ni regresó
data
, el primero arrojó un error de JavaScript.Aquí está la nueva versión:
Uso:
Nota: Solo necesita asegurarse de que el
name
de su selección se haya[]
agregado al final, por ejemplo:fuente
fuente