禁用按钮不会在服务器端触发点击事件

4

我在ASPX页面上有一个ImageButton,如下所示:

<asp:ImageButton ID="btnProcessPayment" ImageUrl="~/Images/process-payment.png" OnClientClick="return disableButton(this);"
                                    runat="server" OnClick="btnProcessPayment_Click" />

这是我的JavaScript函数:
function disableButton(button) {
            button.disabled = true;
            return true;
        }

如您所见,在我的 JavaScript 事件处理程序中,我已禁用了按钮,以防止用户连续点击该按钮。然而,由于此操作,即使在服务器端,事件处理程序也无法被触发。我做错了什么吗?

注意:如果我注释掉此行button.disabled = true;,一切都能够很好地运行。


我刚刚注意到了同样的问题。至少我不是唯一一个。 - Sam Rueby
3个回答

5
禁用按钮也会禁用表单提交。您需要自己提交:
function disableButton(button) { 
    button.disabled = true; 
    __doPostBack(<%= btnProcessPayment.ClientID %>,'');   // need to manually submit
    return true; 
} 

根据Waqas的建议更新!


这不起作用。事件处理程序仍然没有执行。最终我使用Vinay的方法使其工作:https://dev59.com/3VLTa4cB1Zd3GeqPZ15y 虽然看起来有点像hack,设置超时然后禁用,但它确实有效。 - Jaggu
button.id - 检查是否正确。否则,尝试执行 document.form1.submit()(根据您的代码进行更改)。 - Mrchief
1
用<%=btnProcessPayment.ClientID%>替换button.id - Waqas
1
@Brad8118:不要假定使用jQuery!或者原型。$到底代表什么呢? :) - Mrchief

2
您需要触发按钮的服务器端事件,类似于以下内容:
onclick="this.disabled=true;__doPostBack('buttonclientid','');"

或者
 function disableButton(button) {
            button.disabled = true;
            __doPostBack('buttonclientid','');
            return true;
        }

0

我使用这个方法,它对我有效

 __doPostBack('<%= btnSubmit.ClientID %>', '');  

这里的btnSubmit是我按钮的ID,我想触发该按钮的服务器端点击事件。它可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接