Joh*_*yre 8 javascript asp.net client-side double-submit-prevention
像地球上的其他每个Web开发人员一样,用户双击表单上的提交按钮时遇到问题.我的理解是,处理这个问题的传统方法是在第一次点击后立即禁用按钮,但是当我这样做时,它不会发布.
我对此做了一些研究,上帝知道有足够的信息,但其他问题,如表单提交上的禁用按钮,禁用按钮似乎工作.提交后禁用按钮的原始海报似乎与我有同样的问题,但没有提及如何/如果他解决它.
这里有一些关于如何重复它的代码(在IE8 Beta2中测试,但在IE7中有同样的问题)
我的aspx代码
<%@ Page Language="C#" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<script language="javascript" type="text/javascript">
function btn_onClick()
{
var chk = document.getElementById("chk");
if(chk.checked)
{
var btn = document.getElementById("btn");
btn.disabled = true;
}
}
</script>
<body>
<form id="form1" runat="server">
<asp:Literal ID="lit" Text="--:--:--" runat="server" />
<br />
<asp:Button ID="btn" Text="Submit" runat="server" />
<br />
<input type="checkbox" id="chk" />Disable button on first click
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我的cs代码
using System;
public partial class _Default : System.Web.UI.Page
{
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
btn.Click += new EventHandler(btn_Click);
btn.OnClientClick = "btn_onClick();";
}
void btn_Click(object sender, EventArgs e)
{
lit.Text = DateTime.Now.ToString("HH:mm:ss");
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,单击该按钮时,将发生回发,并更新时间.但是当您选中复选框时,下次单击该按钮时,该按钮将被禁用(按预期方式),但永远不会进行回发.
我在这里想念的是什么?
提前致谢.
我想你只是错过了这个标签:
UseSubmitBehavior="false"
Run Code Online (Sandbox Code Playgroud)
试试这样:
<asp:Button ID="btnUpdate" runat="server" UseSubmitBehavior="false" OnClientClick="if(Page_ClientValidate()) { this.disabled = true; } else {return false;}" Text = "Update" CssClass="button" OnClick="btnUpdate_Click" ValidationGroup="vgNew"/>
Run Code Online (Sandbox Code Playgroud)
UseSubmitBehavior="false"
将提交按钮转换为普通按钮(<input type="button">
).如果您不希望发生这种情况,可以隐藏提交按钮并立即在其位置插入禁用按钮.因为这种情况发生得太快,所以看起来按钮会被禁用给用户.详情请见Josh Stodola的博客.
代码示例(jQuery):
$("#<%= btnSubmit.ClientID %>").click(function()
{
$(this)
.hide()
.after('<input type="button" value="Please Wait..." disabled="disabled" />');
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5967 次 |
最近记录: |