jQuery: ¿cómo saber en qué botón se hizo clic al enviar el formulario?
Tengo un .submit()
evento configurado para el envío de formularios. También tengo varios formularios en la página, pero aquí solo uno para este ejemplo. Me gustaría saber en qué botón de envío se hizo clic sin aplicar un .click()
evento a cada uno.
Aquí está la configuración:
<html>
<head>
<title>jQuery research: forms</title>
<script type='text/javascript' src='../jquery-1.5.2.min.js'></script>
<script type='text/javascript' language='javascript'>
$(document).ready(function(){
$('form[name="testform"]').submit( function(event){ process_form_submission(event); } );
});
function process_form_submission( event ) {
event.preventDefault();
//var target = $(event.target);
var me = event.currentTarget;
var data = me.data.value;
var which_button = '?'; // <-- this is what I want to know
alert( 'data: ' + data + ', button: ' + which_button );
}
</script>
</head>
<body>
<h2>Here's my form:</h2>
<form action='nothing' method='post' name='testform'>
<input type='hidden' name='data' value='blahdatayadda' />
<input type='submit' name='name1' value='value1' />
<input type='submit' name='name2' value='value2' />
</form>
</body>
</html>
Ejemplo en vivo en jsfiddle
Además de aplicar un evento .click() en cada botón, ¿hay alguna manera de determinar en qué botón de envío se hizo clic?
Hice la misma pregunta: ¿Cómo puedo obtener el botón que provocó el envío desde el evento de envío del formulario?
Terminé encontrando esta solución y funcionó bastante bien:
$(document).ready(function() {
$("form").submit(function() {
var val = $("input[type=submit][clicked=true]").val();
// DO WORK
});
$("form input[type=submit]").click(function() {
$("input[type=submit]", $(this).parents("form")).removeAttr("clicked");
$(this).attr("clicked", "true");
});
});
En su caso con múltiples formularios, es posible que necesite modificar esto un poco, pero aún así debería aplicarse.
Descubrí que esto funcionó.
$(document).ready(function() {
$( "form" ).submit(function () {
// Get the submit button element
var btn = $(this).find("input[type=submit]:focus" );
});
}
Esto funciona para mí:
$("form").submit(function() {
// Print the value of the button that was clicked
console.log($(document.activeElement).val());
}