ASP.NET阻止双击

时间:2011-06-08 20:30:10

标签: jquery asp.net double-click

我之前看过这个,发现当我测试它时谷歌Chrome,Firefox和IE适用于我的JavaScript,但它似乎是随机的(或浏览器特定的)它不起作用。我需要一个可行的解决方案。

这是我目前正在使用的jQuery:

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

我将类“Once”添加到我想要确保不会多次单击的按钮。同样,它总是适合我,但对于一些用户它根本不做任何事情。是否有更好的替代解决方案始终有效?

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

更新6/18: 我从两个持续出现此问题的用户那里获得了更多信息。

有人说他按下按钮一次,屏幕闪烁,所以他离开页面然后回到它并再次按下按钮,这会导致它自动发布两次。

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

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

4 个答案:

答案 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/,但这可能对你正在尝试的内容有点过分。