简体   繁体   English

单击一次后禁用按钮

[英]Disabling the button after once click

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 application.) (我的应用程序是用 MVC ASP.NET 编写的,我已经在一个普通的 ASP.NET 应用程序中完成了。)

I tried using JavaScript and jQuery and it's not working.我尝试使用 JavaScript 和 jQuery,但它不起作用。 The button is getting disabled but the form is not being submitted.该按钮被禁用,但未提交表单。

jQuery: jQuery:

$("#ClickMe").attr("disabled", "disabled"); 

JavaScript: JavaScript:

function DisableNextButton(btnId) {
    document.getElementById(btnId).disabled = 'true';
}

Both methods work great, but now the form won't submit.这两种方法都很好用,但现在表单无法提交。

jQuery now has the .one() function that limits any given event (such as "submit") to one occurrence. jQuery现在有.one()函数将任何给定事件(例如“submit”)限制为一次出现。

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. 将find()函数中的选择器更改为您要禁用的任何按钮。

Note: Per Francisco Goldenstein, I've changed the selector to the form and the event type to submit. 注意:根据Francisco Goldenstein的说法,我已将选择器更改为要提交的表单和事件类型。 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. 注意2:每个gorelog,使用attr('disabled','disabled')将阻止您的表单发送提交按钮的值。 If you want to pass the button value, use attr('onclick','this.style.opacity = "0.6"; return false;') instead. 如果要传递按钮值,请使用attr('onclick','this.style.opacity = "0.6"; return false;')

jQuery .one() should not be used with the click event but with the submit event as described below. jQuery .one()不应该与click事件一起使用,而是与下面描述的submit事件一起使用。

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

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: 如果在用户单击按钮后立即设置disabled =“disabled”,并且表单因此没有提交,您可以尝试两件事:

//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. 虽然我老实说打赌会有更好的方法来做到这一点。

$("selectorbyclassorbyIDorbyName").click(function () {
  $("selectorbyclassorbyIDorbyName").attr("disabled", true).delay(2000).attr("disabled", false);
});

select the button and by its id or text or class ... it just disables after 1st click and enables after 20 Milli sec 选择按钮及其ID或文本或类......它只是在第一次点击后禁用,并在20毫秒后启用

Works very well for post backs n place it in Master page, applies to all buttons without calling implicitly like onclientClick 适用于post backs n非常适合将它放在Master页面中,适用于所有按钮而不会像onclientClick那样隐式调用

Use modern Js events, with "once"! 使用现代Js事件,“一次”!

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 文档CanIUse

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. 
    }

To submit form in MVC NET Core you can submit using INPUT : 要在MVC NET Core中提交表单,您可以使用INPUT提交:

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

To make it a button I am using Bootstrap for example: 为了使它成为一个按钮我使用Bootstrap例如:

<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; 要防止在MVC NET Core中发送重复的表单,可以添加onclick事件,并使用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(); 如果要首先检查表单是否有效,然后禁用该按钮,请添加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'; 您可以向禁用按钮添加文本,说明您现在正处于发送表单的过程中,当所有验证都正确时使用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';">

think simple 想简单吧

<button id="button1" onclick="Click();">ok</button>
<script>
    var buttonClick = false;
    function Click() {
        if (buttonClick) {
            return;
        }
        else {
            buttonClick = true;
            //todo
            alert("ok");
            //buttonClick = false;
        }
    }
</script>

if you want run once :) 如果你想运行一次:)

To disable a submit button, you just need to add a disabled attribute to the submit button. 要禁用提交按钮,只需在提交按钮中添加禁用的属性即可。

$("#btnSubmit").attr("disabled", true);

To enable a disabled button, set the disabled attribute to false, or remove the disabled attribute. 要启用禁用按钮,请将disabled属性设置为false,或删除disabled属性。

$('#btnSubmit').attr("disabled", false);

or 要么

$('#btnSubmit').removeAttr("disabled");

You could just add the following to your HTML : <input type="submit" onClick="this.disabled = true;" />您可以将以下内容添加到您的HTML 中<input type="submit" onClick="this.disabled = true;" /> <input type="submit" onClick="this.disabled = true;" />

Set disabled = true inside the function that handles a click.在处理点击的 function 中设置 disabled = true。

document.getElementById(btn.id).disabled = true; document.getElementById(btn.id).disabled = true;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM