Disable button on form submission

前端 未结 17 1550
伪装坚强ぢ
伪装坚强ぢ 2020-12-01 00:13

I have a button that I would like to disable when the form submits to prevent the user submitting multiple times.

I have tried naively disabling the button with java

相关标签:
17条回答
  • 2020-12-01 01:03

    Not sure if this will help, but there's onsubmit event in form. You can use this event whenever the form submit (from any button or controls). For reference: http://www.htmlcodetutorial.com/forms/_FORM_onSubmit.html

    0 讨论(0)
  • 2020-12-01 01:06

    The following function is useful without needing the disabling part which tends to be unreliable. Just use "return check_submit();" as part of the onclick handler of the submit buttons.

    There should also be a hidden field to hold the form_submitted initial value of 0;

    <input type="hidden" name="form_submitted" value="0">
    
    function check_submit (){
                if (document.Form1.form_submitted.value == 1){
                    alert("Don't submit twice. Please wait.");
                    return false;
                }
                else{
                    document.Form1.form_submitted.value = 1;
                    return true;
                }
                return false;
        }
    
    0 讨论(0)
  • 2020-12-01 01:08

    You may also be able to take advantage of the onsubmit() javascript event that is available on forms. This event fires when the form is actually submit and shouldn't trap until after the validation is complete.

    0 讨论(0)
  • 2020-12-01 01:08

    one of my solution is as follow:

    add the script in the page_load of your aspx file

        HtmlGenericControl includeMyJava = new HtmlGenericControl("script");
        includeMyJava.Attributes.Add("type", "text/javascript");
        includeMyJava.InnerHtml = "\nfunction dsbButton(button) {";
        includeMyJava.InnerHtml += "\nPage_ClientValidate();";
        includeMyJava.InnerHtml += "\nif(Page_IsValid)";
        includeMyJava.InnerHtml += "\n{";
        includeMyJava.InnerHtml += "\nbutton.disabled = true;";
        includeMyJava.InnerHtml += "}";
        includeMyJava.InnerHtml += "\n}";
        this.Page.Header.Controls.Add(includeMyJava);
    

    and then set your aspx button parameters as follow:

    <asp:Button ID="send" runat="server" UseSubmitBehavior="false" OnClientClick="dsbButton(this);" Text="Send" OnClick="send_Click" />
    

    Note that "onClientClick" helps to disable to button and "UseSubmitBehaviour" disables the traditional submitting behaviour of page and allows asp.net to render the submit behaviour upon user script.

    good luck

    -Waqas Aslam

    0 讨论(0)
  • 2020-12-01 01:10

    Just heard about the "DisableOnSubmit" property of an <asp:Button>, like so:

    <asp:Button ID="submit" runat="server" Text="Save"
        OnClick="yourClickEvent" DisableOnSubmit="true" />
    

    When rendered, the button's onclick attribute looks like so:

    onclick="this.disabled=true; setTimeout('enableBack()', 3000);
      WebForm_DoPostBackWithOptions(new
      WebForm_PostBackOptions('yourControlsName', '', true, '', '', false, true))
    

    And the "enableBack()' javascript function looks like this:

    function enableBack()
    {
        document.getElementById('yourControlsName').disabled=false;
    }
    

    So when the button is clicked, it becomes disabled for 3 seconds. If the form posts successfully then you never see the button re-enable. If, however, any validators fail then the button becomes enabled again after 3 seconds.

    All this just by setting an attribute on the button--no javascript code needs to be written by hand.

    0 讨论(0)
  • 2020-12-01 01:13

    Give this a whirl:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Threading;
    
    public partial class _Default : System.Web.UI.Page 
    {
        protected void Page_Load(object sender, EventArgs e)
        {
    
             // Identify button as a "disabled-when-clicked" button...
             WebHelpers.DisableButtonOnClick( buttonTest, "showPleaseWait" ); 
        }
    
        protected void buttonTest_Click( object sender, EventArgs e )
        {
            // Emulate a server-side process to demo the disabled button during
            // postback.
            Thread.Sleep( 5000 );
        }
    }
    
    
    
    using System;
    using System.Web;
    using System.Web.UI.WebControls;
    using System.Text;
    
    public class WebHelpers
    {
        //
        // Disable button with no secondary JavaScript function call.
        //
        public static void DisableButtonOnClick( Button ButtonControl )
        {
            DisableButtonOnClick( ButtonControl, string.Empty );    
        }
    
        //
        // Disable button with a JavaScript function call.
        //
        public static void DisableButtonOnClick( Button ButtonControl, string ClientFunction )
        {   
            StringBuilder sb = new StringBuilder( 128 );
    
            // If the page has ASP.NET validators on it, this code ensures the
            // page validates before continuing.
            sb.Append( "if ( typeof( Page_ClientValidate ) == 'function' ) { " );
            sb.Append( "if ( ! Page_ClientValidate() ) { return false; } } " );
    
            // Disable this button.
            sb.Append( "this.disabled = true;" ); 
    
            // If a secondary JavaScript function has been provided, and if it can be found,
            // call it. Note the name of the JavaScript function to call should be passed without
            // parens.
            if ( ! String.IsNullOrEmpty( ClientFunction ) ) 
            {
                sb.AppendFormat( "if ( typeof( {0} ) == 'function' ) {{ {0}() }};", ClientFunction );  
            }
    
            // GetPostBackEventReference() obtains a reference to a client-side script function 
            // that causes the server to post back to the page (ie this causes the server-side part 
            // of the "click" to be performed).
            sb.Append( ButtonControl.Page.ClientScript.GetPostBackEventReference( ButtonControl ) + ";" );
    
            // Add the JavaScript created a code to be executed when the button is clicked.
            ButtonControl.Attributes.Add( "onclick", sb.ToString() );
        }
    }
    
    0 讨论(0)
提交回复
热议问题