Asp.net 防止意外双击按钮

Asp.net 防止意外双击按钮,asp.net,javascript,button,Asp.net,Javascript,Button,我有一些控件继承自ASP.NET按钮,并使用服务器上的单击 如果用户单击两次,该按钮将触发两个服务器端事件。我怎样才能防止这种情况 我试着通过javascript设置this.disabled='true'(在onclick属性中)在点击后(在onclick属性中),但这也阻止了第一次回发。几天前有人在这里说了这句话,我同意-使用javascript只是隐藏按钮,而不是禁用它;您可以在其位置显示一个“微调器”图像,让用户知道发生了什么。有关禁用回发控件的信息,请参见此示例。它应该能帮助你实现你想

我有一些控件继承自
ASP.NET按钮
,并使用服务器上的
单击

如果用户单击两次,该按钮将触发两个服务器端事件。我怎样才能防止这种情况


我试着通过javascript设置
this.disabled='true'
(在
onclick
属性中)在点击后(在
onclick
属性中),但这也阻止了第一次回发。

几天前有人在这里说了这句话,我同意-使用javascript只是隐藏按钮,而不是禁用它;您可以在其位置显示一个“微调器”图像,让用户知道发生了什么。

有关禁用回发控件的信息,请参见此示例。它应该能帮助你实现你想要实现的目标


我所做的不是隐藏,而是使用javascript交换按钮。单击第一个按钮时显示另一个灰显图像。

您不一定希望在回发时显示禁用的按钮。您要确保他们不会意外提交两次。因此,由于服务器端操作而禁用或隐藏按钮在游戏中已经太晚了。此时,第二个请求已经在路上了。您需要使用javascript或确保服务器端代码不会运行两次。

对于FormView模板中的updatepanel和按钮,我使用以下方法:

<script type="text/javascript">
    // Using that prm reference, hook _initializeRequest
    Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(InitializeRequestBuchung);

    // Abfangen von Mehrfachklicks auf Buttons für asynchrone Postbacks im Updatepanel
    function InitializeRequestBuchung(sender, args) {
        var arrButtonIds = ["ButtonInsert", "ButtonUpdate"];

        // Get a reference to the PageRequestManager.
        var prm = Sys.WebForms.PageRequestManager.getInstance();
        if (prm.get_isInAsyncPostBack() & jQuery.inArray(args.get_postBackElement().id, arrButtonIds) > -1) {
            args.set_cancel(true);
        }
    }
</script>

//使用该prm引用,hook\u initializeRequest
Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(initializeRequestStBuchung);
//Abfangen von Mehrfachclicks auf按钮für异步回发im Updatepanel
函数初始值设定项RequestBuchung(发送方,参数){
var arrButtonIds=[“ButtonInsert”,“ButtonUpdate”];
//获取对PageRequestManager的引用。
var prm=Sys.WebForms.PageRequestManager.getInstance();
if(prm.get_isInAsyncPostBack()&jQuery.inArray(args.get_postBackElement().id,arrButtonIds)>-1){
参数设置\取消(真);
}
}

如果当前异步回发仍处于活动状态,则此操作将取消后续回发。工作正常。

将按钮属性UseSubmitBehavior设置为false。然后创建一个OnClientClick函数来禁用该按钮。 它看起来像这样:

<script type="text/javascript">
   function disableFunctn(button){
       button.disabled = true;
   }
</script>
<asp:Button ID="button1" UseSubmitBehavior="false" OnClientClick="disableFunctn(this);"/>

功能禁用功能(按钮){
button.disabled=true;
}
最快最便宜的方式:

<asp:Button ID="button1" UseSubmitBehavior="false" OnClientClick="this.disabled=true;"/>

您也可以尝试,例如btnSave.Enable=false;点击按钮时,在单击事件例程中完成按钮处理之前。如果需要将其重置以允许其启用,请使用一个单独的按钮重置该按钮以供重用

另一种方法是设置带有验证的按钮,这样当询问用户是否要保存时,按钮应同时弹出


另一种方法是标记第一次出现,然后为第二次出现设置一个弹出窗口,以验证第二次或后续使用。

我不相信我喜欢按钮消失的想法。除非另一个(禁用的按钮)取代了它们的位置。最终用户可能会感到困惑。。。不?我同意Rob的观点,我不喜欢按钮因为旋转器的想法而消失+1——向用户展示正在发生的事情。如果他绝对坚持的话,我仍然会让他有机会/控制权再次提交。谢谢。。。我错过了该技术所需的手动回发参考。不幸的是,将UseSubmitBehavior更改为false意味着您的表单将不再支持没有JavaScript的用户。该网站似乎已关闭,Chrome报告该网站包含恶意软件