Form submit without refresh using jquery/ajax if page have more than one form

前端 未结 4 879
抹茶落季
抹茶落季 2020-12-11 10:14

Hi all I know that its very easy to submit a form without refreshing if there is only one form on the page but what about if there are more than one form on the page. Im usi

相关标签:
4条回答
  • 2020-12-11 10:28

    What you have should work on multiple forms, however it would be better and a lot easier to debug if apply the event listener using jQuery instead:

    $('form').submit(processForm); // listen to each form’s submit
    
    function processForm(e) { 
        e.preventDefault(); // prevents default submit action
        $.ajax( {
            type: 'POST',
            url: form_process.php,
            data: 'user_name=' + encodeURIComponent(document.getElementById('user_name').value),
            success: function(data) {
                $('#message').html(data);
            }
        } );
    }
    

    HTML (without the ugly onsubmit attribute):

    <form action="" method="post">
    <input type='text' name='user_name' id='user_name' value='' />
    <input type='submit' name='submit' value='submit'/>
    </form>
    
    0 讨论(0)
  • 2020-12-11 10:31

    Add form_id while calling processForm(form_id) and using the id serialize the form.

    function processForm(form) { 
        $.ajax( {
            type: 'POST',
            url: form_process.php,
            data: $(form).serialize(),
            success: function(data) {
                $('#message').html(data);
            }
        } );
        return false;
    }
    <form action="" method="post" onsubmit="processForm(this)">
      <input type="text" name="user_name" id="user_name1" value="">
      <input type="submit" name="submit" value="submit" >
    </form>
    <form action="" method="post" onsubmit="processForm(this)">
      <input type="text" name="user_name" id="user_name2" value="">
      <input type="submit" name="submit" value="submit" >
    </form>
    <div id='message'></div>
    

    jsFiddle

    0 讨论(0)
  • 2020-12-11 10:34

    Just customize your function and add params like formid to get form data within the function to pass processForm("id of the form");

    function processForm(formId) { 
        //your validation code
        $.ajax( {
                type: 'POST',
                url: form_process.php,
                data: $("#"+formId).serialize(), 
                success: function(data) {
                    $('#message').html(data);
                }
            } );
        }
    
    <form action="" id="form1" method="post" onsubmit="processForm('form1');return false;">
    <input type='text' name='user_name' id='user_name' value='' />
    <input type='submit' name='submit' value='submit'/>
    </form>
    
    <form action="" id="form2" method="post" onsubmit="processForm('form2');return false;">
    <input type='text' name='user_name' id='user_name' value='' />
    <input type='submit' name='submit' value='submit'/>
    </form>
    <form action="" id="form3" method="post" onsubmit="processForm('form3');return false;">
    <input type='text' name='user_name' id='user_name' value='' />
    <input type='submit' name='submit' value='submit'/>
    </form>
    <div id='message'></div>
    
    0 讨论(0)
  • 2020-12-11 10:39

    just thought I'd add to this, if you have multiple forms on one page, you can set a function to act on all forms independently by getting the form's action value. As follows (tested with jQuery 1.8.3):

     $('form').submit(function(){
       var action = $(this).attr("action")
       $.ajax({
         url: action,
         type:'POST',
         data: $(this).serialize(),
         success: function(){
                //alert message
            }                   
         })
       return false
     })
    

    Hope this helps someone out!

    0 讨论(0)
提交回复
热议问题