ASP.NET阻止双击
我之前看过这个,发现当我测试它时谷歌Chrome,Firefox和IE适用于我的JavaScript,但它似乎是随机的(或浏览器特定的)它不起作用。 我需要一个有效的解决方案。
这就是我目前使用的jQuery:
$(document).ready(function () { $("a.Once").one("click", function () { $(this).click(function () { return false; }); }); });
我将类“Once”添加到我想要确保不会多次单击的按钮。 同样,它总是适合我,但对于一些用户它根本不做任何事情。 是否有更好的替代解决方案始终有效?
更新:这些是ASP.NET LinkButtons。
更新6/18:我从两个持续出现此问题的用户那里获得了更多信息。
一个说他按下按钮一次,屏幕闪烁,所以他离开页面然后回到它并再次点击按钮,这会导致它自动发布两次。
其他人声称他点击了一个不同的按钮,导致此按钮自动回发两次。 我查看了代码,该按钮没有任何问题。
我唯一能想到的是缓存问题,或者在页面加载完成之前点击按钮。 我无法重现问题,其中一个使用我使用的完全相同的浏览器。
如果这是表单post,那么您可以在提交时禁用所有提交按钮:
$('#someForm').submit(function(){ $('input[type=submit]', this).attr('disabled', 'disabled'); });
$('#someForm').submit(function(){ $('input[type=submit]', this).attr('disabled', 'disabled'); });
或者他们被允许点击多次,但只是经过一段时间后?
有些情况下one()失败 – 请参阅http://api.jquery.com/one/上的评论。任何想法,如果它的浏览器compat问题与您的用户或jQuery没有加载?
编辑:刚发现这是一个链接按钮。 在那种情况下试试
$('#yourClientIdForYourLinkButton').click(function(e) { e.preventDefault(); });
$('#yourClientIdForYourLinkButton').click(function(e) { e.preventDefault(); });
或直接使用clientid之类的东西
$('#<%=linkButton.ClientId%>').click(function(e) { e.preventDefault(); });
$('#<%=linkButton.ClientId%>').click(function(e) { e.preventDefault(); });
我已经尝试了很多JQuery选项,但这是我在c#中编写一个简单代码后的解决方法:
.aspx页面:
现在,您将此添加到Page_Load中的代码中:
protected void Page_Load(object sender, EventArgs e) { ClientScriptManager cs = Page.ClientScript; ButtonID.Attributes.Add("onClick", "this.disabled=true;" + cs.GetPostBackEventReference(ButtonID, "").ToString()); }
最后一件事:
protected void ButtonID_Click(object sender, EventArgs e) { System.Threading.Thread.Sleep(5000); //rest of your code }
希望这可以帮助!
post更新:
使用JavaScript,您可以在按钮单击的客户端事件中停止表单提交,当它第二次发生时
或者您可以在Postback的后端执行此操作:
btnSubmit.Attributes.Add("onclick", " this.disabled = true; " + ClientScript.GetPostBackEventReference(btnSubmit, null) + ";");
您可以隐藏现有链接,然后放置一些文本,提醒用户该页面正在加载。
Button
另外,请考虑添加代码服务器端。 您永远不会指望启用JavaScript。
编辑:答案2.0
这真的取决于你的愿望。 一种选择是在单击后禁用锚标记。 这应该适用于所有浏览器。
我所看到的另一个选项是隐藏有问题的项目,ala http://www.ilovecolors.com.ar/avoid-double-click-jquery/ ,但这可能对你正在尝试的内容有些过分。