Estou tentando acessar um elemento de formulário no callback de sucesso do ajaxForm. O elemento form é passado como quarto elemento (veja: http://malsup.com/jquery/form/#options-object -> sucesso).
Então, se eu testá-lo via console.log(form)
, funciona. Eu obtenho um objeto jQuery e posso acessar o formulário via form[0].
Mas o console.log
me mostra, que sob [0]
existem mais elementos, as entradas do formulário. Posso acessá-los via form[0][0] or form[0][1]
e assim por diante.
Mas como posso obter todos os objetos filhos de uma só vez?
Minha situação é que eu não sei a quantidade de entradas, então eu preciso acessar todas as entradas do elemento através de algo como um foreach
. Mas com form[0]
Acabei de receber o elemento DOM do formulário.
É um pouco complexo, mas espero que você entenda o meu problema.
Editar: Isto é o que eu recebo do console.log (form):
[form#doku_newrowJsonForm.doku_newrowJsonForm, context: form#doku_newrowJsonForm.doku_newrowJsonForm, jquery: "1.9.1", constructor: function, init: function, selector: ""…]
0: form#doku_newrowJsonForm.doku_newrowJsonForm
0: input
1: input#AdrowAdtableId
2: input#AdrowCustomerId
3: input#AdrowContent19.input-small
4: input#AdrowContent20.input-small
5: input#AdrowContent21.input-small
6: input#AdrowContent22.input-small
7: input#AdrowContent23.input-small
8: input#AdrowContent24.input-small
form [0] apenas me dá o elemento DOM e a forma [0] .find (": input") me dá um TypeError não capturado: O objeto # não possui nenhum método "find" ...
Edit2 Para ser claro: Eu quero obter, por exemplo, entrada # AdrowAdtableId. Eu posso acessar isso através do formulário [0] [1]. Mas eu não sei o tamanho das entradas que tenho no formulário. É dinamicamente. Então seria ótimo fazer algo como form [0] .each (). Mas form [0] me dá o elemento DOM e não o objeto jQuery ...
Respostas:
1 para resposta № 1Apenas use find()
. Se você quiser todas as entradas dentro do formulário (e o próprio formulário pode ser acessado como form[0]
) apenas faça:
$(form[0]).find(":input")
E se form
se já for um objeto jQuery, o seguinte é um pouco melhor:
form.eq(0).find(":input")
Note que eu usei o :input
pseudo-classe para obter todos os elementos de entrada, não apenas <input>
uns.
1 para resposta № 2
Se você estiver usando o formulário jQuery e estiver interessado nos valores postados, poderá fazer o seguinte:
var form = $("form");
form.ajaxForm({
beforeSubmit: function(arr, $form, options) {
form.data("form-values", arr);
},
success: function() {
console.log(form.data("form-values")); // logs the submitted values
}
});
1 para resposta № 3
Você pode acessar todas as entradas em um formulário com o .each()
$(form[0]).find(":input").each(function{){
var myInputValue = $(this).val();
});
Se você precisa saber o tipo específico de entrada, veja isto: Como obter o tipo de entrada usando jquery?