jQuery submit, how can I know what submit button was pressed?

前端 未结 8 1448
盖世英雄少女心
盖世英雄少女心 2020-12-14 23:43

I\'m using ajaxSubmit plugin to send Ajax forms, but for some reason this plugin doesn\'t send names/values of input[type=image]\'s. So now I\'m catching the su

相关标签:
8条回答
  • 2020-12-15 00:15

    Hi the answer did not convince me so much here to bring an alternative. What I will do is verify by JS which button was pressed.

    <head>
    <script>
    $('body').click(function(event) {
         var log = $('#log');
         if($(event.target).is('#btn1')) {
            log.html(event.target.id + ' was clicked.');
            return false;
        }else{
            if($(event.target).is('#btn2')) {
               log.html(event.target.id + ' was clicked.');
               return false;
                  }
             }
    });
    </script>
    </head>
    <body>
       <form id="formulario"  method="post">
          <div id="log"></div>
          <input type="submit" id="btn1" value="Btn 01">
          <input type="submit" id="btn2" value="Btn 02">
      </form>
    </body>
    

    Use this page to make the test Test

    Saludos

    0 讨论(0)
  • 2020-12-15 00:16

    This is what I am using (slight variation on the others, using mouseup and keyup events instead of focus):

    var submitButton = undefined;
    $('#your-form-id').find(':submit').live('mouseup keyup',function(){
        submitButton  = $(this);
    });
    $('#your-form-id').submit(function() {
        console.log(submitButton.attr('name'));
    });
    
    0 讨论(0)
  • 2020-12-15 00:26
    $("input .button-example").click(function(){
    //do something with $(this) var
    });
    

    PS: do you have jQuery controling the $ var? Otherwise you have to do this:

    jQuery.noConflict();
    jQuery(document).ready(function(){
        jQuery("input .button-example").click(function(){
        //do something with jQuery(this) var
           alert(jQuery(this));
        });
    });
    

    if you wan't control on event (form submit)

    $(document).ready(function(){
        $("#formid").submit(function() {
              alert('Handler for .submit() called.');
              return false;
        });
    });
    

    tell me something if it worked ;)

    0 讨论(0)
  • 2020-12-15 00:26

    This is how I solved it. I was inspired by some of the answers posted above but I needed an approach that would work for all my forms since I loaded them dynamically.

    I noticed that the ajaxSubmit had a data option which described by the plugin does the following:

    An object containing extra data that should be submitted along with the form.

    This is exactly what we need.

    So I attached the click handler on my submit buttons and saved the element using jQuery (I prefer this method than adding a fake attribute):

    $('[type="submit"]').live('click', function(e){
            jQuery.data( $(this).parents('form')[0], 'submitTrigger', $(this).attr('name'));
    });
    

    And then in my ajaxSubmit call I built the data object and sent it like this:

    function dialogFormSubmit( form ) {
        var data = {}
        data[jQuery.data( form, 'submitTrigger')] = true;
        $(form).ajaxSubmit({ 
            data: data
        });
        return false;
    }
    

    I built the data object that way because I wanted it to behave the same way as if I would have submitted it with vanilla HTML/PHP (name of the input is the key in the $_POST array). I suppose if I wanted to stay true to its real behaviour I would have added the value or innerHTML of the submit button but I usually just check if it's set so it was unncessary :).

    0 讨论(0)
  • 2020-12-15 00:30

    I found this very useful. It covers the case of clicking, and also submitting with tab index and hitting space or enter. It captures the last input before a submit was made, and that's the button which submitted, so you can have several buttons and check each as a target to perform something unique.

    $('#form input').live('focusin focusout mouseup', function() {
        // Add a data attribute to the form and save input as last selected
        $('#form').data('lastSelected', $(this));
    });
    $('#form').submit(function() {
        var last = $(this).data('lastSelected').get(0);
        var target = $('#button').get(0);
        console.log(last);
        console.log(target);
        // Verify if last selected was our target button
        if (last == target) {
            console.log('bingo');
            return false;
        }
    });
    
    0 讨论(0)
  • 2020-12-15 00:30
    $(document).ready(function() {
        var clickedVar = null;
        $('#form :submit').focus(function() {
             clickedVar = $(this).attr("name");
             alert(clickedVar);
        });
    });
    
    0 讨论(0)
提交回复
热议问题