关于asp.net:防止意外双击按钮

关于asp.net:防止意外双击按钮

Preventing accidental double clicking on a button

我有一些继承自ASP.NET buttons并使用onserverclick的控件。

如果用户单击两次,该按钮将触发两个服务器端事件。 我该如何预防?

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


请参阅此示例以禁用回发控制。它应该可以帮助您完成您要实现的目标。

http://encosia.com/2007/04/17/disable-a-button-control-during-postback/


如果有一个Updatepanel和一个FormView-Template内部的按钮,我将使用以下方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<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);
        }
    }

如果当前异步回发仍处于活动状态,则会取消后续的回发。完美运作。


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


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

1
2
3
4
<script type="text/javascript">
   function disableFunctn(button){
       button.disabled = true;
   }

最快最便宜的方式:

1
 

除了隐藏之外,我所做的是使用javascript交换按钮。单击第一个按钮,即可显示另一个变灰的图像。


几天前,有人在这里的某个地方说过这一点,我同意-使用javascript只是隐藏按钮而不是禁用它;您可以在其位置显示"旋转"图像,以使用户知道发生了什么。


您也可以尝试例如btnSave.Enable = false;。单击按钮时以及单击事件例程中完成按钮处理之前。如果需要重置它以启用它,请使用单独的按钮重置该按钮以重新使用。

另一种方法是设置带有验证的按钮,以便询问用户是否要保存,该按钮应两次弹出。

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


推荐阅读