Disable submit button ONLY after submit

前端 未结 13 467
囚心锁ツ
囚心锁ツ 2020-12-02 22:49

I have the following HTML and jquery:






Test disabling submit button fo

相关标签:
13条回答
  • 2020-12-02 23:37

    My problem was solved when i add bind section to my script file.

    Totally i did this 2 steps :

    1 - Disable button and prevent double submitting :

    $('form').submit(function () {
        $(this).find(':submit').attr('disabled', 'disabled');
    });
    

    2 - Enable submit button if validation error occurred :

    $("form").bind("invalid-form.validate", function () {
        $(this).find(':submit').prop('disabled', false);
    });
    
    0 讨论(0)
  • 2020-12-02 23:37
    $(document).ready(function() {
        $(body).submit(function () {
            var btn = $(this).find("input[type=submit]:focus");
            if($(btn).prop("id") == "YourButtonID")
                $(btn).attr("disabled", "true");
        });
    }
    

    and in server side code:

    protected void YourButton_Clicked(object sender, EventArgs e)
    {
        ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "", "$('#YourButtonID').removeAttr('disabled');", true);
    }
    
    0 讨论(0)
  • 2020-12-02 23:39

    I faced the same problem. Customers could submit a form and then multiple e-mail addresses will receive a mail message. If the response of the page takes too long, sometimes the button was pushed twice or even more times..

    I tried disable the button in the onsubmit handler, but the form wasn't submitted at all. Above solutions work probably fine, but for me it was a little bit too tricky, so I decided to try something else.

    To the left side of the submit button, I placed a second button, which is not displayed and is disabled at start up:

    <button disabled class="btn btn-primary" type=button id="btnverzenden2" style="display: none"><span class="glyphicon glyphicon-refresh"></span> Sending mail</button>   
    <button class="btn btn-primary" type=submit name=verzenden id="btnverzenden">Send</button>
    

    In the onsubmit handler attached to the form, the 'real' submit is hidden and the 'fake' submit is shown with a message that the messages are being sent.

    function checkinput // submit handler
    {
        ..
        ...
        $("#btnverzenden").hide(); <= real submit button will be hidden
        $("#btnverzenden2").show(); <= fake submit button gets visible
        ...
        ..
    }
    

    This worked for us. I hope it will help you.

    0 讨论(0)
  • 2020-12-02 23:40

    Reading the comments, it seems that these solutions are not consistent across browsers. Decided then to think how I would have done this 10 years ago before the advent of jQuery and event function binding.

    So here is my retro hipster solution:

    <script type="text/javascript">
    var _formConfirm_submitted = false;
    </script>
    <form name="frmConfirm" onsubmit="if( _formConfirm_submitted == false ){ _formConfirm_submitted = true;return true }else{ alert('your request is being processed!'); return false;  }" action="" method="GET">
    
    <input type="submit" value="submit - but only once!"/>
    </form>
    

    The main point of difference is that I am relying on the ability to stop a form submitting through returning false on the submit handler, and I am using a global flag variable - which will make me go straight to hell!

    But on the plus side, I cannot imagine any browser compatibility issues - hey, it would probably even work in Netscape!

    0 讨论(0)
  • 2020-12-02 23:44

    Not that I recommend placing JavaScript directly into HTML, but this works in modern browsers (not IE11) to disable all submit buttons after a form submits:

    <form onsubmit="this.querySelectorAll('[type=submit]').forEach(b => b.disabled = true)">
    
    0 讨论(0)
  • 2020-12-02 23:45

    This is the edited script, hope it helps,

       <script type="text/javascript">
            $(function(){
                $("#yourFormId").on('submit', function(){
                    return false;
                    $(".submitBtn").attr("disabled",true); //disable the submit here
                    //send the form data via ajax which will not relaod the page and disable the submit button
                    $.ajax({
                       url      : //your url to submit the form,
                       data     : { $("#yourFormId").serializeArray() }, //your data to send here 
                       type     : 'POST',
                       success  : function(resp){
                            alert(resp);    //or whatever 
                       },
                       error    : function(resp){
    
                       }
                    });
                })
            });
        </script>
    
    0 讨论(0)
提交回复
热议问题