javascript - example - jquery submit preventdefault
¿Hay una mejor solución jQuery para this.form.submit();? (8)
Deseo desencadenar el evento de envío del formulario en el que se encuentra el elemento actual. Un método que sé que funciona a veces es:
this.form.submit();
Me pregunto si existe una mejor solución, posiblemente usando jQuery, ya que no estoy seguro de que el método funcione en todos los navegadores.
Editar:
La situación que tengo es la siguiente:
<form method="get">
<p><label>Field Label
<select onchange="this.form.submit();">
<option value="blah">Blah</option>
....
</select></label>
</p>
</form>
Deseo poder enviar el formulario al cambiar el <select>
.
Lo que estoy buscando es una solución que funcione en cualquier campo dentro de cualquier forma sin conocer la identificación o el nombre en el formulario. $(''form:first'')
y $(''form'')
no funcionarán porque el formulario podría ser el tercero en la página. Además, ya estoy usando jQuery en el sitio, por lo que usar un poco de jQuery no es un gran problema.
Entonces, ¿hay alguna manera de que jQuery recupere el formulario en el que está la entrada / selección / textarea?
Al igual que Matthew''s respuesta Matthew''s , descubrí que puedes hacer lo siguiente:
$(this).closest(''form'').submit();
Incorrecto: el problema con el uso de la funcionalidad principal es que el campo debe estar inmediatamente dentro del formulario para trabajar (no dentro de tds, etiquetas, etc.).
Me corrigen: el padre s (con una s) también funciona. Thxs Paolo por señalar eso.
Creo que lo que estás buscando es algo como esto:
$(field).closest("form").submit();
Por ejemplo, para manejar el evento onchange, tendrías esto:
$(select your fields here).change(function() {
$(this).closest("form").submit();
});
Si, por algún motivo, no utiliza jQuery 1.3 o superior, puede llamar a los parents
lugar de a los closest
.
En JQuery puedes llamar
$("form:first").trigger("submit")
No sé si eso es mucho mejor. Creo que form.submit (); es bastante universal.
He descubierto que el uso de jQuery es la mejor solución
$(this.form).submit()
Al usar esta declaración, los complementos de jquery (por ejemplo, el complemento de formulario jquery ) funcionan correctamente y la sobrecarga de desplazamiento de jQuery DOM se minimiza.
Siempre puede solicitar su formulario. Envíelo, pero puede que llame de la misma manera:
$("form").submit(); // probably able to affect multiple forms (good or bad)
// or you can address it by ID
$("#yourFormId").submit();
También puede JQuery-ize funciones al evento submit, pero ese es un concepto diferente.
Tu pregunta es un tanto confusa porque no explicas lo que quieres decir con "elemento actual".
Si tiene múltiples formularios en una página con todo tipo de elementos de entrada y un botón de tipo "enviar", al presionar "enter" al llenar cualquiera de sus campos se activará el envío de ese formulario. No necesitas ningún Javascript allí.
Pero si tiene varios botones de "enviar" en un formulario y ninguna otra entrada (por ejemplo, botones "editar fila" y / o "eliminar fila" en la tabla), entonces la línea que publicó podría ser la forma de hacerlo.
Otra forma (no se necesita Javascript) podría ser dar diferentes valores a todos sus botones (que son del tipo "enviar"). Me gusta esto:
<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>
Cuando haga clic en un botón, solo se enviará el formulario que contiene el botón y solo se enviará el valor del botón que acierte (junto con otros valores de entrada).
Luego, en el servidor, solo lee el valor de la variable "myaction" y decide qué hacer.
<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''];
-->
this.form.submit();
Esta es probablemente su mejor apuesta. Especialmente si aún no está utilizando jQuery en su proyecto, no es necesario agregarlo (o cualquier otra biblioteca JS) solo para este propósito.