2010-09-02 14 views
6

Ho un modulo creato dinamicamente utilizzando ajax (come i dati per gli elementi del modulo devono provenire da un database) e voglio serializzare gli elementi del modulo da inviare per 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:jQuery serializeArray non raccoglie elementi modulo creati dinamicamente

$(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 apportare alcune modifiche ai dati prima alla submission e questo codice non è stato ancora scritto, ma quello che sto trovando è che tutti gli elementi di input sulla pagina che esistevano al momento del caricamento della pagina sono stati raccolti correttamente, tutti gli elementi che sono popolati usando Javascript vengono rilevati correttamente, ma qualsiasi creato usando ajax sono ignorati.

So che questo è normalmente risolto utilizzando "live", ma non sono chiaro su come risolvere questo con serializeArray(). Utilizzando Ajax elementi aggiuntivi vengono aggiunti allo #customSearchTable e questi sono quelli che non vengono prelevati.

Qualsiasi aiuto molto apprezzato.

Grazie

+1

Questo metodo non interessa quando gli elementi sono stati aggiunti, sembra che non vengano aggiunti correttamente come elementi del modulo, puoi pubblicare quel codice? Ad esempio, hanno un attributo 'name' su di loro? –

+0

Nick, grazie mille, hai ragione, gli elementi del modulo generati dinamicamente mancavano dell'attributo del nome .... DOH !!! Grazie mille!! – Cydaps

risposta

7

te lo espongono 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 is here:

.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 un name attribute, il .filter() chiamata utilizzando this.name filtrerà gli elementi su quelli da serializzare.

+0

Grazie Nick, spero che lo chiarisca per chiunque altro abbia lo stesso problema. – Cydaps

+0

ha ottenuto una correzione per '