【问题标题】:How to disable a button once the form submits?表单提交后如何禁用按钮?
【发布时间】:2011-04-04 18:01:50
【问题描述】:

我正在使用 asp.net 网络表单;我想提交一个表单并保持禁用按钮,直到它保存到我的数据库中,就像 Stackoverflow 一样。有什么建议吗?

protected void Lb_Save_Click(object sender, EventArgs e)
{
   //disable my button
      //Do a DB insert 
   //enable my button
}

编辑:

我将首先进行客户端验证,因此我不希望我的按钮在那里被禁用,但我想在 onclick 功能启动后禁用它。希望大家明白我的意思。

我也想对 asp:linkbutton 做同样的事情,但我不知道 firefox 的行为如何。由于链接按钮将呈现为锚点,我该如何禁用它?

伙计们,你没有得到我的问题。

如何在回发期间禁用 asp:button?(不在 jQuery/Javascript 中)

【问题讨论】:

  • 您真的需要查看代码来执行此操作吗?当您单击 POST YOUR QUESTION 时,您从客户端页面发送 Ajax 请求,该页面包含需要保存在其中的所有信息,并让它(请求的)超时为 0,因此它会阻塞直到无穷大(或者您可以将其设置为更大,比如 10 秒),并在成功请求时添加处理程序,这将启用按钮。在服务器端,保持响应,直到您将所有数据保存到数据库中,然后以 OK 或任何将恢复客户端上的 Ajax 线程并调用 SUCCESS 客户端的方式进行响应。你可以用 jQuery 来做 想看看如何?
  • @Cipi:也许你应该把这个作为答案发布:P
  • 好的,现在我看到了你的编辑......不要 -1 我的回答我以为你希望 JS 这样做......

标签: jquery asp.net webforms


【解决方案1】:

请尝试以下代码。

jQuery('#mybuttonid').click(function(){ jQuery(this).attr('disabled',disabled'); });

【讨论】:

  • 是的,我已经尝试过了,对我来说效果很好。如果您对此有任何疑问,请提供您的代码 sn-p。
【解决方案2】:

使用 Web 表单(不是 mvc)执行此操作的唯一方法是隐藏原始按钮并将其替换为禁用按钮或其他禁用按钮的图片。如果你真的禁用了按钮,.net 的 JavaScript 将不会提交。

(是的,我知道你可以“破解” .net JavaScript,但真的,这样更好吗?)

一旦您知道自己需要做什么,执行此操作的 JavaScript 就很简单——如果您想查看一些我应该能够挖掘出来的代码——只需在 cmets 中询问即可。

注意:MVC 应该与其他答案中的代码一样简单,即在 ajax 调用之前禁用按钮。 SO 正在使用 MVC,因此他们不会遇到您遇到的问题。

【讨论】:

    【解决方案3】:

    怎么样?那是一种魔法。

    现在,如果你不想要 javascript:

    1. 在回发时,禁用该按钮。
    2. 不做实际工作,但设置 Session 变量以指示需要什么工作。
    3. 设置 HTML 元标记以强制立即刷新。
    4. 返回 - 浏览器将立即刷新页面。
    5. 当您现在收到请求时,您会检查 Session var,然后开始工作。

    可能还有其他方法,但坦率地说,它们都很奇怪,你为什么不想要 JavaScript?

    【讨论】:

    • 如果我使用 javascript,在我将记录提交到数据库之前,我的按钮将如何被禁用...
    【解决方案4】:

    好的,这里有一些代码可以让您知道该怎么做。您将需要 DISABLED 类,它将设置按钮的适当 CSS 样式或其他任何显示为禁用的样式...

    客户端 JAVA 脚本

    function doRequest(MY_DATA_THAT_I_WANT_TO_SEND)
    {
        $.ajax({
           type: "GET",
           url: "saving_page.aspx?data="+MY_DATA_THAT_I_WANT_TO_SEND,
           timeout: 10000,
           beforeSend: function()
           {    
               $("#button").toggleClass("DISSABLED");
           },
           complete: function(XMLHttpRequest, textStatus)
           {
               //Or you can remove success handler and let complete hander enables
               //the button, so it gets enabled if there was an error or there was success
               //$("#button").toggleClass("DISSABLED");         
           },                             
           success: function(data)
           {                                            
    
               if(data == "OK") $("#button").toggleClass("DISSABLED");                       
           }
    
         });        
    };
    

    服务器端 CS

    protected void Page_Load(object sender, EventArgs e)
    {
        string data = Request.Params.Get("data");
        saveDataToDataBase(data);
    
        //Sleep some more...
        Thread.Sleep(3000);
    
        //Send ok
        Response.Write("OK");
        Response.End();
    }
    

    【讨论】:

      【解决方案5】:

      它在submit() 上禁用它,它再也不会启用它,因为你被重定向了。但是,如果您想进行某种验证,您只需这样做

      $("#yourForm").submit(function(e) {
          $("#yourButton").attr('disabled','disabled');
          if (whateverValidation) {
              e.preventDefault();
              $("#yourButton").removeAttr('disabled');
          } 
      });
      

      【讨论】:

      • 为什么不希望立即禁用该按钮以防止多次提交?
      • 好吧,我假设在成功验证后您实际上会提交帖子,该帖子会重定向,因此如果验证通过,则无需启用按钮。上面的示例将在您点击提交后立即禁用按钮,如果whateverValidation 为真,它将阻止提交并启用按钮。
      • @Robert 将适用于 asp.net webforms,它只有一个 ID 为 aspnetForm的表单
      • @Pandiya Chendur 它应该适用于任何表单 ID,只需将 #yourForm 替换为 #aspnetForm#yourButton 用提交按钮 ID 或其他标识符来获取按钮。
      • @Robert 如何使它成为我所有提交按钮的可重用函数?
      【解决方案6】:

      简答:Javascript。

      更长的答案:

      $('#formid').submit(function () {
           $('#buttonid').hide();
       $('#disabledbuttonimageid').show();
      });
      

      【讨论】:

      • @Murali - 对于 ASP.NET,您还必须考虑框架所做的名称/ID 修改。这意味着您必须在 jQuery 选择器中使用不同的语法。此处显示的语法将与 id 为“buttonid”的控件匹配。但是,框架会在运行时将其更改为“some_big_long_string_buttonid”,因此您的选择器将类似于“:button[id$='buttonid']”,以查找其 id ends 在“buttonid”中的控件.
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-22
      • 2011-03-22
      • 1970-01-01
      • 2016-04-03
      • 1970-01-01
      相关资源
      最近更新 更多