Tengo un formulario con un atributo onsubmit
. Necesito vincular un nuevo evento de envío y necesito que este se ejecute antes de cualquier función de envío existente.¿Es posible vincular una función submit() antes de cualquier envío/envío existente?
El siguiente código demuestra el problema.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Test</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
jQuery(function($) {
// a plugin
$('form').submit(function() {
alert("Second");
});
// an other plugin
$('form').submit(function() {
alert("Third");
});
// this event must always be executed as first event
$('form').submit(function() {
alert("Always First");
});
});
</script>
</head>
<body>
<form onsubmit="javascript:alert('Fourth');">
<p>
<input type="submit">
</p>
</form>
</body>
</html>
Si ejecuta el script, primero obtendrá "Segundo", luego "Primero".
¿Es posible vincular un nuevo evento de envío y especificar si se debe invocar la función antes de cualquier evento existente?
Restricciones:
- eventos existentes deben ser preservados.
- no puede eliminar eventos existentes debido a que el contenido del atributo
onsubmit
contiene una lógica bastante complejo escrito por rieles - (Añadido): el evento siempre debe ser ejecutado antes de cualquier evento onsubmit existente y eventos ya binded (quizás binded por otro complemento)
¿Alguna idea?
Esta solución funciona genial. Me olvidé de mencionar que otros complementos ya podrían haber agrupado otros eventos en la misma forma. ¿Es posible enlazar el evento antes de cualquier evento onsubmit/binded? Intenté usar unbind/bind (también leyendo la implementación de la función clon) pero no pude obtener una solución razonable. –
Puede probar la función die() ya que muchos complementos usan live() para capturar el evento submit. http://api.jquery.com/live/ – xijo