jQuery: how to get which button was clicked upon form submission?

后端 未结 26 1356
旧巷少年郎
旧巷少年郎 2020-11-22 16:01

I have a .submit() event set up for form submission. I also have multiple forms on the page, but just one here for this example. I\'d like to know which submi

相关标签:
26条回答
  • 2020-11-22 16:34

    This works for me:

    $("form").submit(function() {
       // Print the value of the button that was clicked
       console.log($(document.activeElement).val());
    }
    
    0 讨论(0)
  • 2020-11-22 16:34

    It helped me https://stackoverflow.com/a/17805011/1029257

    Form submited only after submit button was clicked.

    var theBtn = $(':focus');
    if(theBtn.is(':submit'))
    {
      // ....
      return true;
    }
    
    return false;
    
    0 讨论(0)
  • 2020-11-22 16:36

    If what you mean by not adding a .click event is that you don't want to have separate handlers for those events, you could handle all clicks (submits) in one function:

    $(document).ready(function(){
      $('input[type="submit"]').click( function(event){ process_form_submission(event); } );
    });
    
    function process_form_submission( event ) {
      event.preventDefault();
      //var target = $(event.target);
      var input = $(event.currentTarget);
      var which_button = event.currentTarget.value;
      var data = input.parents("form")[0].data.value;
    //  var which_button = '?';       // <-- this is what I want to know
      alert( 'data: ' + data + ', button: ' + which_button );
    }
    
    0 讨论(0)
  • 2020-11-22 16:36

    As I can't comment on the accepted answer, I bring here a modified version that should take into account elements that are outside the form (ie: attached to the form using the form attribute). This is for modern browser: http://caniuse.com/#feat=form-attribute . The closest('form') is used as a fallback for unsupported form attribute

    $(document).on('click', '[type=submit]', function() {
        var form = $(this).prop('form') || $(this).closest('form')[0];
        $(form.elements).filter('[type=submit]').removeAttr('clicked')
        $(this).attr('clicked', true);
    });
    
    $('form').on('submit', function() {
        var submitter = $(this.elements).filter('[clicked]');
    })
    
    0 讨论(0)
  • 2020-11-22 16:36

    Working with this excellent answer, you can check the active element (the button), append a hidden input to the form, and optionally remove it at the end of the submit handler.

    $('form.form-js').submit(function(event){
        var frm = $(this);
        var btn = $(document.activeElement);
        if(
            btn.length &&
            frm.has(btn) &&
            btn.is('button[type="submit"], input[type="submit"], input[type="image"]') &&
            btn.is('[name]')
        ){
            frm.append('<input type="hidden" id="form-js-temp" name="' + btn.attr('name') + '" value="' + btn.val() + '">');
        }
    
        // Handle the form submit here
    
        $('#form-js-temp').remove();
    });
    

    Side note: I personally add the class form-js on all forms that are submitted via JavaScript.

    0 讨论(0)
  • 2020-11-22 16:37
    $('form').submit(function (ev) {
      let clickedButton = ev.originalEvent.explicitOriginalTarget;
    });
    
    0 讨论(0)
提交回复
热议问题