Existe uma melhor solução jQuery para this.form.submit () ;?
-
03-07-2019 - |
Pergunta
Eu quero disparar o evento submeter de forma o elemento atual está em um método que eu sei que funciona, por vezes, é:
this.form.submit();
Eu estou querendo saber se existe uma solução melhor, possivelmente usando jQuery, como eu não estou 100% certo método funciona em todos os navegadores.
Editar:
A situação que eu tenho é, como se segue:
<form method="get">
<p><label>Field Label
<select onchange="this.form.submit();">
<option value="blah">Blah</option>
....
</select></label>
</p>
</form>
Eu quero ser capaz de enviar o formulário sobre a mudança do <select>
.
O que eu estou procurando é uma solução que funciona em qualquer campo dentro de qualquer forma, sem saber o ID ou nome no formulário. $('form:first')
e $('form')
não trabalho vai porque a forma poderia ser o terceiro na página. Além disso, estou usando jQuery no site já, portanto, usando um pouco de jQuery não é um grande negócio.
Assim, há uma maneira de ter jQuery recuperar o formulário de entrada / selecionar / textarea está em?
Solução
Eu acho que o que você está procurando é algo como isto:
$(field).closest("form").submit();
Por exemplo, para manipular o evento onchange, você teria o seguinte:
$(select your fields here).change(function() {
$(this).closest("form").submit();
});
Se, por algum motivo você não estiver usando jQuery 1.3 ou acima, você pode chamar parents
vez de closest
.
Outras dicas
this.form.submit();
Esta é provavelmente a sua melhor aposta. Especialmente se você ainda não estiver usando jQuery em seu projeto, não há necessidade de adicioná-lo (ou qualquer outra biblioteca JS) apenas para esta finalidade.
Você sempre pode JQuery-ize seu form.submit, mas só ele pode chamar o mesma coisa:
$("form").submit(); // probably able to affect multiple forms (good or bad)
// or you can address it by ID
$("#yourFormId").submit();
Você também pode anexar funções para o evento apresentar, mas isso é um conceito diferente.
Mateus resposta, eu só descobri que você pode fazer o seguinte:
$(this).closest('form').submit();
Errado:. O problema com o uso da funcionalidade dos pais é que as necessidades de campo para ser imediatamente dentro do formulário de trabalho (tds não dentro, etiquetas, etc)
Eu corrijo: pai s (com um s) também funciona. Thxs Paolo por apontar isso.
Eu descobri que usando jQuery a melhor solução é
$(this.form).submit()
Usando esta instrução plugins jQuery (por exemplo forma plugin jQuery ) funciona corretamente e jQuery DOM travessia sobrecarga é minimizado .
A sua pergunta em um pouco confuso em que que você não explicar o que você quer dizer com "elemento atual".
Se você tem várias formas em uma página com todos os tipos de elementos de entrada e um botão do tipo "enviar", em seguida, apertar o botão "enter" mediante o preenchimento de qualquer de seus campos irá desencadear apresentação desse formulário. Você não precisa de nenhum Javascript lá.
Mas se você tem múltiplos "enviar" botões em um formulário e há outras entradas (por exemplo "linha de edição" e / ou "Apagar linha" botões na tabela), então a linha que você postou poderia ser a maneira de fazê-lo.
Outra maneira (sem Javascript necessário) poderia ser para dar valores diferentes para todos os seus botões (que são do tipo "submit"). Como esta:
<form action="...">
<input type="hidden" name="rowId" value="...">
<button type="submit" name="myaction" value="edit">Edit</button>
<button type="submit" name="myaction" value="delete">Delete</button>
</form>
Quando você clica em um botão só será submetido o formulário que contém o botão, e somente o valor do botão que você bateu será enviado (ao longo de outros valores de entrada).
Em seguida, no servidor que você acabou de ler o valor da "MyAction" variável e decidir o que fazer.
Em JQuery você pode chamar
$("form:first").trigger("submit")
Não sei se isso é muito melhor. Acho form.submit (); é bastante universal.
<form method="get">
<p><label>Field Label
<select onchange="this.form.submit();">
<option value="blah">Blah</option>
....
</select>
</label>
</p>
**<!-- <input name="submit" type="submit" /> // name="submit_new_name" -->**
</form>
<!--
this.form.submit == this.form.elements['submit'];
-->