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?

Foi útil?

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'];

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