Disabling the button after once click

后端 未结 9 1503
遥遥无期
遥遥无期 2020-11-28 09:32

I need to disable a button once it\'s clicked so the user can\'t click it more than once. (My application is written in MVC ASP.NET, I\'ve done this in a normal ASP.NET appl

相关标签:
9条回答
  • 2020-11-28 10:07

    jQuery now has the .one() function that limits any given event (such as "submit") to one occurrence.

    Example:

    $('#myForm').one('submit', function() {
        $(this).find('input[type="submit"]').attr('disabled','disabled');
    });
    

    This code will let you submit the form once, then disable the button. Change the selector in the find() function to whatever button you'd like to disable.

    Note: Per Francisco Goldenstein, I've changed the selector to the form and the event type to submit. This allows you to submit the form from anywhere (places other than the button) while still disabling the button on submit.

    Note 2: Per gorelog, using attr('disabled','disabled') will prevent your form from sending the value of the submit button. If you want to pass the button value, use attr('onclick','this.style.opacity = "0.6"; return false;') instead.

    0 讨论(0)
  • 2020-11-28 10:08
    protected void Page_Load(object sender, EventArgs e)
        {
            // prevent user from making operation twice
            btnSave.Attributes.Add("onclick", 
                                   "this.disabled=true;" + GetPostBackEventReference(btnSave).ToString() + ";");
    
            // ... etc. 
        }
    
    0 讨论(0)
  • 2020-11-28 10:10

    jQuery .one() should not be used with the click event but with the submit event as described below.

     $('input[type=submit]').one('submit', function() {
         $(this).attr('disabled','disabled');
     });
    
    0 讨论(0)
  • 2020-11-28 10:12

    Use modern Js events, with "once"!

    const button = document.getElementById(btnId);
    button.addEventListener("click", function() {
        // Submit form
    }, {once : true});
    
    // Disabling works too, but this is a more standard approach for general one-time events
    

    Documentation, CanIUse

    0 讨论(0)
  • 2020-11-28 10:13

    To submit form in MVC NET Core you can submit using INPUT:

    <input type="submit" value="Add This Form">
    

    To make it a button I am using Bootstrap for example:

    <input type="submit" value="Add This Form" class="btn btn-primary">
    

    To prevent sending duplicate forms in MVC NET Core, you can add onclick event, and use this.disabled = true; to disable the button:

    <input type="submit" value="Add This Form" class="btn btn-primary" onclick="this.disabled = true;">
    

    If you want check first if form is valid and then disable the button, add this.form.submit(); first, so if form is valid, then this button will be disabled, otherwise button will still be enabled to allow you to correct your form when validated.

    <input type="submit" value="Add This Form" class="btn btn-primary" onclick="this.form.submit(); this.disabled = true;">
    

    You can add text to the disabled button saying you are now in the process of sending form, when all validation is correct using this.value='text';:

    <input type="submit" value="Add This Form" class="btn btn-primary" onclick="this.form.submit(); this.disabled = true; this.value = 'Submitting the form';">
    
    0 讨论(0)
  • 2020-11-28 10:18

    If when you set disabled="disabled" immediately after the user clicks the button, and the form doesn't submit because of that, you could try two things:

    //First choice [given myForm = your form]:
    myInputButton.disabled = "disabled";
    myForm.submit()
    
    //Second choice:
    setTimeout(disableFunction, 1);  
    //so the form will submit and then almost instantly, the button will be disabled  
    

    Although I honestly bet there will be a better way to do this, than that.

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