stc*_*flw 55 c# asp.net postback onclick onclientclick
我有一个如下按钮,
<asp:Button ID="pagerLeftButton" runat="server" OnClientClick="disable(this)" onclick="pager_Left_Click" Text="<" />
Run Code Online (Sandbox Code Playgroud)
当我使用我的按钮时,onclick不会触发.当我删除OnClientClick时,然后触发onclick.
我需要做的是,在回发期间禁用按钮并在回发结束后启用它.
编辑:附加信息:
我添加了断点,我的触发功能是c#部分,我正在调试,他们肯定没有开火.那些功能就像
protected void pager_Left_Click(object sender, EventArgs e)
{
//Do smthing.
}
protected void pager_Right_Click(object sender, EventArgs e)
{
//Do smthing.
}
Run Code Online (Sandbox Code Playgroud)
当我点击我的按钮时,它被禁用1-2秒并自动启用,但我不确定为什么它被启用.我没有添加任何部分,以便再次启用它.
Vin*_*dey 98
来自web.archive.org上的这篇文章:
诀窍是使用按钮控件的OnClientClick和UseSubmitBehavior属性.还有其他方法,包括在服务器端添加属性的代码,但我认为这样做的简单性更有吸引力:
Run Code Online (Sandbox Code Playgroud)<asp:Button runat="server" ID="BtnSubmit" OnClientClick="this.disabled = true; this.value = 'Submitting...';" UseSubmitBehavior="false" OnClick="BtnSubmit_Click" Text="Submit Me!" />
OnClientClick允许您添加客户端OnClick脚本.在这种情况下,JavaScript将禁用button元素并将其文本值更改为progress消息.回发完成后,新呈现的页面将使按钮恢复其初始状态,而无需任何额外的工作.
在客户端禁用提交按钮带来的一个缺陷是它将取消浏览器的提交,从而取消回发.将UseSubmitBehavior属性设置为false会使.NET注入必要的客户端脚本以终止回发,而不是依赖于浏览器的表单提交行为.在这种情况下,它注入的代码将是:
Run Code Online (Sandbox Code Playgroud)__doPostBack('BtnSubmit','')
这将添加到我们的OnClientClick代码的末尾,为我们提供这个呈现的HTML:
Run Code Online (Sandbox Code Playgroud)<input type="button" name="BtnSubmit" onclick="this.disabled = true; this.value ='Submitting...';__doPostBack('BtnSubmit','')" value="Submit Me!" id="BtnSubmit" />
这提供了一个很好的按钮禁用效果和处理文本,同时回发完成.
Gaʀ*_*ʀʀʏ 13
与OnClick一起使用时,OnClientClick似乎非常挑剔.
我尝试使用以下用例失败:
OnClientClick="return ValidateSearch();"
OnClientClick="if(ValidateSearch()) return true;"
OnClientClick="ValidateSearch();"
Run Code Online (Sandbox Code Playgroud)
但他们没有工作.以下工作:
<asp:Button ID="keywordSearch" runat="server" Text="Search" TabIndex="1"
OnClick="keywordSearch_Click"
OnClientClick="if (!ValidateSearch()) { return false;};" />
Run Code Online (Sandbox Code Playgroud)
小智 6
Vinay(上图)提供了有效的解决方案. 实际上导致按钮的OnClick事件在OnClientClick事件函数之后无法工作的原因是MS已将其定义在哪里,一旦按钮被禁用(在OnClientClick事件调用的函数中),按钮"通过不尝试完成"来"尊重"通过调用OnClick事件的已定义方法来调用按钮的活动.
我花了几个小时试图解决这个问题.一旦我删除了语句以禁用提交按钮(在OnClientClick函数内),就调用了OnClick方法,没有进一步的问题.
微软,如果你正在听,一旦点击按钮,它应该完成它的已分配活动,即使它在此活动的一部分被禁用.只要在单击时未禁用它,它就应该完成所有已分配的方法.
这里有两个问题:
要解决此问题,请在JavaScript 事件后禁用该按钮onclick
.一个简单的方法是setTimeout
按照这个答案的建议使用.
此外,OnClientClick
即使ASP.NET验证失败,代码仍会运行,因此添加检查可能是个好主意Page_IsValid
.这可确保在验证失败时不会禁用该按钮.
OnClientClick="(function(button) { setTimeout(function () { if (Page_IsValid) button.disabled = true; }, 0); })(this);"
Run Code Online (Sandbox Code Playgroud)
如问题所示,将所有这些JavaScript代码放在自己的函数中更为简洁:
OnClientClick="disable(this);"
function disable(button) {
setTimeout(function () {
if (Page_IsValid)
button.disabled = true;
}, 0);
}
Run Code Online (Sandbox Code Playgroud)
要解决此问题,请禁用服务器端的按钮.例如,在OnClick
事件处理程序中:
OnClick="Button1_Click"
protected void Button1_Click(object sender, EventArgs e)
{
((Button)sender).Enabled = false;
}
Run Code Online (Sandbox Code Playgroud)
最后,请记住,防止重复按下按钮不会阻止两个不同的用户同时提交相同的数据.确保在服务器端考虑到这一点.
归档时间: |
|
查看次数: |
117813 次 |
最近记录: |