如何防止链接按钮的双重提交



如何防止重复提交链接按钮。我有一个付款按钮,我想在有人点击它时立即禁用它,并在付款失败时重新启用它。我正在使用 AJAX 和程序化发布到支付网关。

我可以使用以下代码禁用链接按钮:

asp:LinkButton ID="btnPayment"  runat="server" onClientClick="this.disabled=true;__doPostBack(this.id,'');" Text='<%#Databinder.Eval(Container.DataItem,"Author")%>' ></asp:LinkButton>

但是,当付款失败时,如何启用它?

我认为在按钮点击处理程序中,如果付款失败,您可以编写代码来执行javascript,如下所示:

ScriptManager.RegisterStartUpScript(this.Page, typeof(Page) , "enableBtn" , "$('[$=btnPayment].removeAttr(disabled)')" , true);

这需要jquery。

或者,如果你不想使用jquery,你也可以调用document,getelementbyID。

让我知道这是否不是您想要的

我还有一个解决方案,但这似乎很讨厌:

在开始

<asp:LinkButton ID="btnPayment"  runat="server" Text='<%#Databinder.Eval(Container.DataItem,"Author")%>' ></asp:LinkButton>

使用 jquery 可以做到这一点:

$(document).ready(function() {  $('id$=btnPayment').live("click", function(e) {
  $(this).attr("disabled", "disabled");  
  __doPostBack($(this).attr("id"),'');
   e.preventDefault();
 });  });

因此,在 Ajax 中,您删除了禁用的属性,以便链接按钮再次变得可单击。

这有意义吗

在代码隐藏中,可以启用和禁用代码。单击后,首先禁用链接按钮,如果付款成功,则启用它。因为上面的代码也会做服务器跳闸,所以 Ajax 调用不会触发。

btnLogin.Enabled = false;
if (txtUserName.Text == "hh") btnLogin.Enabled = true;

最新更新