Eu tenho um formulário com muitos campos de entrada.
Quando eu pego o evento de envio de formulário com o jQuery, é possível obter todos os campos de entrada desse formulário em uma matriz associativa?
javascript
jquery
Vasil
fonte
fonte
Respostas:
Graças à dica de Simon_Weaver, aqui está outra maneira de fazer isso, usando
serializeArray
:Observe que este trecho falhará nos
<select multiple>
elementos.Parece que as novas entradas de formulário HTML 5 não funcionam
serializeArray
no jQuery versão 1.3. Isso funciona na versão 1.4 ou superiorfonte
name
evalue
. Uma solução melhor pode ser processar a saída do serializeArray para qualquer formato necessário.<select>
elementos? Eu tentei,var $inputs = $('#new-ticket :input, :select');
mas isso não funciona. Alguém sabe a maneira correta de fazer isso, porque eu não acho que estou fazendo certo.$("#new-ticket :input, #new-ticket :select")
, ou até melhor,$(":input, :select", "#new-ticket")
Tarde para a parte sobre esta questão, mas isso é ainda mais fácil:
fonte
.serialize()
( api.jquery.com/serialize ) coloca todos os elementos do formulário em uma única sequência pronta para anexar a um URL em uma sequência de consulta, imitando essencialmente uma solicitação de formulário GET. Isso não alcançaria o que a resposta de nickf realiza..serialize()
também funciona apenas em elementos de formulário. Então$('form select').serialize()
, serializará os dados apenas para selects.$('#myForm')
, use $ (this).O plugin jquery.form pode ajudar com o que os outros estão procurando e acabam nessa questão. Não tenho certeza se ele faz diretamente o que você quer ou não.
Há também a função serializeArray .
fonte
Às vezes, acho que conseguir um de cada vez é mais útil. Para isso, existe o seguinte:
fonte
[0].value
a isto, ou seja,$(...)[0].value;
me deu o valor da entrada diretamente, obrigado!A variável elementos conterá todas as entradas, seleções, áreas de texto e conjuntos de campos no formulário.
fonte
Aqui está outra solução, desta forma, você pode buscar todos os dados sobre o formulário e usá-los em uma chamada do servidor ou algo assim.
Você pode usar isso com chamadas ajax:
Espero que seja útil para qualquer um de vocês :)
fonte
Teve um problema semelhante com uma ligeira torção e pensei em jogar isso fora. Eu tenho uma função de retorno de chamada que obtém o formulário, então eu já tinha um objeto de formulário e não podia facilitar as variantes
$('form:input')
. Em vez disso, eu vim com:É uma situação semelhante, mas não idêntica, mas achei esse tópico muito útil e pensei em colocar isso no final e espero que alguém o ache útil.
fonte
Associativo? Não sem algum trabalho, mas você pode usar seletores genéricos:
fonte
O jQuery
serializeArray
não inclui campos desativados; portanto, se você também precisar deles, tente:fonte
http://api.jquery.com/serializearray/
Isso também pode ser feito sem jQuery usando o objeto FormData XMLHttpRequest nível 2
http://www.w3.org/TR/2010/WD-XMLHttpRequest2-20100907/#the-formdata-interface
fonte
Não esqueça as caixas de seleção e os botões de opção -
fonte
Este trecho de código funcionará em vez de nome; e-mail, digite o nome dos campos do formulário
fonte
Parece estranho que ninguém tenha votado ou proposto uma solução concisa para obter dados da lista. Dificilmente quaisquer formulários serão objetos de dimensão única.
A desvantagem desta solução é que seus objetos singleton precisarão ser acessados no índice [0]. Mas a IMO é muito melhor do que usar uma das soluções de mapeamento de doze linhas.
fonte
Eu tive o mesmo problema e o resolvi de uma maneira diferente.
Retorna o valor de todos os campos de entrada. Você pode mudar
$(':input')
para ser mais específico.fonte
A mesma solução dada pelo nickf , mas com os nomes de entrada da matriz levados em consideração, por exemplo
<input type="text" name="array[]" />
fonte
Se você precisar obter vários valores de entradas e estiver usando [] para definir as entradas com vários valores, poderá usar o seguinte:
fonte
Inspirada nas respostas de Lance Rushing e Simon_Weaver , esta é a minha solução favorita.
A saída é uma matriz de objetos, por exemplo
Com o código abaixo,
sua produção final seria
fonte
Eu estou usando esse código sem cada loop:
fonte
Espero que isso seja útil, assim como o mais fácil.
fonte
Quando precisei fazer uma chamada ajax com todos os campos do formulário, tive problemas com o seletor : input retornando todas as caixas de seleção, independentemente de terem sido marcadas ou não. Adicionei um novo seletor para obter apenas os elementos do formulário que podem ser submetidos:
uso:
Ainda não testei com várias caixas de seleção, mas funciona para obter todos os campos do formulário da maneira que um envio padrão faria.
Usei isso ao personalizar as opções do produto em um site OpenCart para incluir caixas de seleção e campos de texto, além do tipo de caixa de seleção padrão.
fonte
serialize () é o melhor método. @ Christopher Parker diz que a resposta de Nickf realiza mais, no entanto, não leva em conta que o formulário pode conter área de texto e selecionar menus. É muito melhor usar serialize () e manipular isso conforme necessário. Os dados de serialize () podem ser usados em uma postagem do Ajax ou em get, portanto, não há problema nisso.
fonte
Espero que isso ajude alguém. :)
fonte
Todas as respostas são boas, mas se houver um campo que você gostaria de ignorar nessa função? Fácil, atribua uma propriedade ao campo, por exemplo ignore_this:
E na sua função Serialize:
É assim que você ignora alguns campos.
fonte
$('.mandatory');
E!$('.mandatory');
ignore_this
adata-ignore-this="true"
vez de criar seus próprios atributos que não fazer W3C validarTente o seguinte código:
fonte
Para vários elementos selecionados (
<select multiple="multiple">
), modifiquei a solução de @Jason Norwood-Young para fazê-la funcionar.A resposta (conforme publicada) assume apenas o valor do primeiro elemento que foi selecionado, nem todos . Também não inicializou ou retornou
data
, o primeiro gerando um erro de JavaScript.Aqui está a nova versão:
Uso:
Nota: Você só precisa garantir que o
name
seu select foi[]
anexado ao final dele, por exemplo:fonte
fonte