Pergunta

Eu tenho um formulário criado dinamicamente usando o AJAX (como dados para os elementos do formulário devem vir de um banco de dados) e quero serializar os elementos do formulário a serem enviados pelo AJAX. Atualmente, estou apenas testando minha teoria usando o código do site jQuery apenas para ver se posso pegar os elementos do formulário e é aí que está o 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

    });
});

Preciso fazer algumas alterações nos dados antes da submissão e esse código ainda não está escrito, mas o que estou descobrindo é que quaisquer elementos de entrada na página que existiam no momento do carregamento da página são coletados corretos, quaisquer elementos que sejam O povoado usando JavaScript é capturado corretamente, mas qualquer criado usando o AJAX é ignorado.

Eu sei que isso normalmente é resolvido usando "Live", mas não estou claro sobre como resolver isso com serializeArray(). Usando os elementos de formulário adicional do Ajax são adicionados ao #customSearchTable E esses são os que não estão sendo escolhidos.

Qualquer ajuda grande apreciada.

Obrigado

Foi útil?

Solução

Vou expor o comentário um pouco mais aqui:

Quando Você ligar .serializeArray() está percorrendo apenas como um <form> A submissão seria ou o mais próximo possível de qualquer maneira, para que os elementos fossem enviados. A parte chave é aqui:

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

Apenas como um <form> enviar não incluiria elementos sem um name atributo, a .filter() ligue usando this.name filtrará esses elementos a serem serializados.

Outras dicas

Para qualquer outra pessoa que encontre isso como um "problema", observe que, de acordo com o comentário de Nick Craver acima, tudo o que é necessário é garantir que o atributo "nome" seja anexado aos novos elementos de formulário que são criados dinamicamente. Isso resolveu meu problema! Muito obrigado, Nick!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top