Pregunta

Tengo una forma que se crea dinámicamente utilizando Ajax (como datos para los elementos de formulario tiene que venir de una base de datos) y quiero serializar los elementos del formulario para enviar por ajax. Actualmente estoy haciendo una prueba mi teoría utilizando el código de la página web de jQuery sólo para ver si puedo recoger los elementos de forma y esto es donde radica el problema:

$(document).ready(function() {
    $('#btnCustomSearch').live('click', function() {
            $('#results').html('');
            alert($('#customSearchTable :input').serializeArray());
            // get all the inputs into an array.
            var fields = $('#customSearchTable :input').serializeArray();
            jQuery.each(fields, function(i, field) {
                $("#results").append(field.name + " = " + field.value + ", ");
            });

            // now we'll reformat the data as we need

            // here we'll send the data via ajax

    });
});

Necesito hacer algunos cambios en los datos antes de su presentación y este código no está escrito todavía, pero lo que estoy encontrando es que todos los elementos de entrada en la página que existían en el momento de carga de la página son recogidos correcta, cualquier elementos que están pobladas con Javascript son recogidos correctamente, pero cualquier creado usando ajax se ignoran.

Sé que esto se resuelve normalmente utilizando "en vivo", pero estoy claro en cuanto a cómo resolver esto con serializeArray(). Usando AJAX elementos de forma adicional se añaden a la #customSearchTable y estos son los que no son recogidos.

Cualquier ayuda grande apreciado.

Gracias

¿Fue útil?

Solución

Voy a exponer sobre el comentario un poco más aquí:

Cuando se llama .serializeArray() se bucle a través de una presentación al igual que lo haría <form> o lo más cerca posible de todos modos , para obtener los elementos para ser presentadas. La parte clave es aquí :

.filter(function() {
  return this.name && !this.disabled &&
         (this.checked || rselectTextarea.test(this.nodeName) ||
         rinput.test(this.type));
})

Al igual que un <form> presentar no incluiría elementos sin un name atributo , el .filter() llamada utilizando this.name filtrará aquellos elementos de los que se serializados.

Otros consejos

Para cualquier otra persona que se encuentra este como un "problema", Tenga en cuenta que de acuerdo con el comentario de Nick Craver anterior, todo lo que se requiere es asegurarse de que el atributo "nombre" se anexa a los nuevos elementos de forma que se crean dinámicamente. Esto resolvió mi problema! Gracias mucho de hecho Nick!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top