我之前看过这个,发现当我测试它时谷歌Chrome,Firefox和IE适用于我的JavaScript,但它似乎是随机的(或浏览器特定的)它不起作用。我需要一个可行的解决方案。
这是我目前正在使用的jQuery:
$(document).ready(function () {
$("a.Once").one("click", function () {
$(this).click(function () { return false; });
});
});
我将类“Once”添加到我想要确保不会多次单击的按钮。同样,它总是适合我,但对于一些用户它根本不做任何事情。是否有更好的替代解决方案始终有效?
更新:这些是ASP.NET LinkButtons。
更新6/18: 我从两个持续出现此问题的用户那里获得了更多信息。
有人说他按下按钮一次,屏幕闪烁,所以他离开页面然后回到它并再次按下按钮,这会导致它自动发布两次。
其他人声称他点击了一个不同的按钮,导致此按钮自动回发两次。我查看了代码,这个按钮没有任何问题。
我唯一能想到的是缓存问题,或者在页面加载完成之前点击按钮。我无法重现问题,其中一个使用我使用的完全相同的浏览器。
答案 0 :(得分:2)
我已经尝试了很多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
}
希望这有帮助!
发布时更新:
使用JavaScript,您可以在按钮点击的客户端事件中停止表单提交,当它第二次发生时
<script type="text/javascript">
var isSubmitted = false;
function preventMultipleSubmissions() {
if (!isSubmitted) {
$('#<%=btnSubmit.ClientID %>').val('Submitting.. Plz Wait..');
isSubmitted = true;
return true;
}
else {
return false;
}
}
</script>
<asp:LinkButton ID="btnSubmit" runat="server" Text="Submit" OnClientClick="return preventMultipleSubmissions();" OnClick="btnSubmit_Click" />
或者您可以在Postback上的后端执行此操作:
btnSubmit.Attributes.Add("onclick", " this.disabled = true; " + ClientScript.GetPostBackEventReference(btnSubmit, null) + ";");
答案 1 :(得分:1)
如果这是针对表单发布的,那么您可以使用以下命令禁用提交时的所有提交按钮:
$('#someForm').submit(function(){
$('input[type=submit]', this).attr('disabled', 'disabled');
});
或者他们是否允许多次点击,但仅在经过一段时间后?
有些情况下one()失败 - 请参阅评论 http://api.jquery.com/one/ 有没有想过它的浏览器是否与用户有关,或者jQuery没有加载?
编辑: 刚发现这是一个链接按钮。在这种情况下尝试
$('#yourClientIdForYourLinkButton').click(function(e) {
e.preventDefault();
});
或直接使用clientid
$('#<%=linkButton.ClientId%>').click(function(e) {
e.preventDefault();
});
答案 2 :(得分:1)
您可以隐藏现有链接,然后放置一些文本,提醒用户该页面正在加载。
<asp:LinkButton CssClass="Once" runat="server">Button</asp:LinkButton>
<script type="text/javascript">
$(document).ready(function ()
{
$("a.Once").one("click", function (event)
{
$(this).hide().after("Please wait while we load your page...");
});
});
</script>
另外,请考虑添加代码服务器端。你永远不能指望启用JavaScript。
编辑:回答2.0
答案 3 :(得分:0)
这真的取决于你的愿望。一种选择是在单击锚标记后禁用它。这应该适用于所有浏览器。
我见过的另一个选项是隐藏有问题的项目,ala http://www.ilovecolors.com.ar/avoid-double-click-jquery/,但这可能对你正在尝试的内容有点过分。