jQuery: ¿cómo saber en qué botón se hizo clic al enviar el formulario?

Resuelto hawkexp asked hace 13 años • 32 respuestas

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?

hawkexp avatar Apr 20 '11 02:04 hawkexp
Aceptado

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.

hunter avatar Apr 19 '2011 19:04 hunter

Descubrí que esto funcionó.

$(document).ready(function() {
    $( "form" ).submit(function () {
        // Get the submit button element
        var btn = $(this).find("input[type=submit]:focus" );
    });
}
Stan avatar Feb 19 '2014 08:02 Stan

Esto funciona para mí:

$("form").submit(function() {
   // Print the value of the button that was clicked
   console.log($(document.activeElement).val());
}
seddonym avatar Feb 24 '2015 13:02 seddonym