Domanda

Ho un modulo che è in modo dinamico creato utilizzando AJAX (come dati per gli elementi del modulo deve venire da un database) e voglio serializzare gli elementi del modulo per inviare da ajax. Attualmente sto solo testando la mia teoria utilizzando il codice dal sito web jQuery solo per vedere se riesco a raccogliere gli elementi del modulo e questo è dove sta il 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

    });
});

Ho bisogno di fare alcune modifiche ai dati prima della presentazione e questo codice non è stato ancora scritto, ma quello che sto trovando è che eventuali elementi di input nella pagina che esistevano al momento della caricamento della pagina sono raccolti corretta, qualsiasi elementi che sono popolate utilizzando Javascript sono raccolti in modo corretto, ma ogni creato utilizzando AJAX vengono ignorati.

So che questo viene normalmente risolto utilizzando "dal vivo", ma sono poco chiare su come risolvere questo con serializeArray(). Utilizzando Ajax elementi del modulo aggiuntivo vengono aggiunti alla #customSearchTable e questi sono quelli non vengono prelevati.

Qualsiasi aiuto grande apprezzato.

Grazie

È stato utile?

Soluzione

io esporre sul commento un po 'di più qui:

Quando si chiama .serializeArray() è scorrendo proprio come una sottomissione <form> volesse o il più vicino possibile in ogni caso , per ottenere gli elementi da sottoporre. La parte fondamentale è qui :

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

Proprio come un <form> presentare non dovrebbe includere elementi senza name attributo , il .filter() chiamata utilizzando this.name filtrerà quegli elementi su quelli essere serializzato.

Altri suggerimenti

Per chiunque altro che trova questo come un "problema", si ricorda che secondo il commento di Nick Craver sopra, tutto quello che serve è quello di garantire che l'attributo "nome" viene aggiunto ai nuovi elementi del modulo che vengono creati in modo dinamico. Questo risolto il mio problema! Grazie mille davvero Nick!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top