2011-06-08 120 views
1

我已经看了这之前发现的JavaScript与谷歌Chrome,火狐和IE对我的作品时,我测试,但它似乎随机(或特定浏览器),这是行不通的。我需要一个可以工作的解决方案。ASP.NET防止双击

这是我目前使用的jQuery:

$(document).ready(function() { 
    $("a.Once").one("click", function() { 
     $(this).click(function() { return false; }); 
    }); 
}); 

我“一次”添加类按钮,我想,以确保不会点击超过一次。再说一次,它总是适合我,但对于一些用户来说,它什么都不做。有没有更好的替代解决方案,始终有效?

更新:这些是ASP.NET的LinkBut​​tons。

更新6/18: 我从谁一直有这个问题,两个用户得到更多的信息。

一说,他打一次按钮,并在屏幕上闪烁,所以他离开页面,回来吧,再点击该按钮,导致其自动发布两次。

其他声称他点击一个不同的按钮,导致此按钮自动回发两次。我查看了代码,该按钮没有任何问题。

我能想到的唯一的事情是一个缓存的问题或可能击中按钮的网页加载完成之前。我一直无法重现该问题,其中一个使用的是我使用的完全相同的浏览器。

+0

当你说“双击”,你的意思单击元素超过一次,永远 - 或UI姿态“双击”? – 2011-06-08 20:33:19

+0

多次单击该按钮。有些人是双重的问题。这是一个ASP.NET LinkBut​​ton。我可能应该提到这一点。 – GregInWI2 2011-06-09 16:47:20

回答

1

如果这是一个表单提交,那么你就可以关闭所有的提交按钮上提交:

 

$('#someForm').submit(function(){ 
    $('input[type=submit]', this).attr('disabled', 'disabled'); 
}); 
 

或者他们获准点击超过一次,但经过一段时间后,才?

有场景,其中一个()失败 - 见 http://api.jquery.com/one/ 任何如果您的用户或jQuery的浏览器compat的问题不加载想法的意见吗?

编辑: 刚刚发现这是一个LinkBut​​ton。在这种情况下尝试

 

$('#yourClientIdForYourLinkButton').click(function(e) { 
    e.preventDefault(); 
}); 
 

或直接使用的clientid像

 

$('#<%=linkButton.ClientId%>').click(function(e) { 
    e.preventDefault(); 
}); 
 
+0

这是一个LinkBut​​ton,它是一个超链接。我应该提到这一点。这并不能阻止它。 – GregInWI2 2011-06-10 12:12:16

+0

在这种情况下,您将需要附加onclick事件 - 请参阅我的编辑 – 2011-06-10 14:04:59

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

+0

它实际上是一个ASP.NET LinkBut​​ton,因此它有一个href =。昨天我将href值改为#但我不喜欢这样的结果。现在我想到了它,我应该将它改为:javascript:void(0); – GregInWI2 2011-06-09 16:53:05

+0

我认为jQuery是问题所在。而不是禁用我将​​href更改为javascript:void(0);并且注意到有一次我按下了按钮,它没有做任何事情,就像它已经失效了,尽管它本来不应该。表单从未提交。你有.NET的服务器端代码来防止它? – GregInWI2 2011-06-10 12:18:24

+0

如果您使用的是LinkBut​​ton,那么您使用的是WebForms。当用户单击按钮时,可以将值存储在ViewState中。 ViewState [“buttonId_clicked”] = true。然后你可以在LinkBut​​ton的click事件中检查它。如果该ViewState值为true,则不要执行该逻辑。这并不理想,但是一种处理它的方法。 考虑到你的问题,jQuery附加了一个额外的事件,它不会替代现有的事件。我会更新代码来反映。 – Fammy 2011-06-10 16:27:04

0

这真的取决于你的愿望在这里。一种选择是在点击后禁用锚标签。这应该适用于所有浏览器。

,我已经看到使用的另一种选择是隐藏在问题的项目,阿拉http://www.ilovecolors.com.ar/avoid-double-click-jquery/,但可能是矫枉过正您尝试什么。

+0

昨天我将href更改为#并且不喜欢因此发生的事情。我应该只是一起删除href标签?点击时没有任何事情发生,第二次是首选。 – GregInWI2 2011-06-09 16:51:44

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" /> 

或者你也可以在后台做在回发:

btnSubmit.Attributes.Add("onclick", " this.disabled = true; " + ClientScript.GetPostBackEventReference(btnSubmit, null) + ";");