限制用户仅单击一次标记

时间:2014-12-06 08:27:48

标签: javascript jquery html

我在锚标签上面临同时多次击中的问题。 我有页面abc.html 它有一个锚标记。当用户点击该链接时,它会处理一个订单请求。现在,如果用户多次点击该链接,我将遇到什么问题,然后我收到重复的订单。 所以我决定仅限一次点击锚标记。我做了一些R& D我发现了一个代码,但它是第一次点击时的disbale链接,而我想在第二次点击时禁用它。 代码如下

<html>
    <head>
        <title>TODO supply a title</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <style>
            a.disabled:link, a.disabled:visited { color: grey; }
        </style>
        <script>
            $(#document).ready(function(){
    $("#disabled a").click(function () {
      $(this).fadeTo("fast", .5).removeAttr("href");
    });
  });
        </script>
    </head>
    <body>
        <a href="http://google.com" onclick="this.removeAttribute('href');this.className='disabled'">Link</a>
    </body>
</html>

2 个答案:

答案 0 :(得分:1)

您可以使用one

$("#disabled a").one('click',function () {
    //to do here
});

示例示例:

$(function() {
  $('#link').one('click', function() {
    console.log('in here ...');
    $(this).removeAttr('href');
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a target="_blank" href="http://www.w3schools.com" id='link'>W3 Schools</a>

答案 1 :(得分:0)

您可以使用(已编辑的代码):

<html>
    <head>
        <title>TODO supply a title</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
        <script>
            $(document).ready(function(){
                var isLinkActive = true;

                $("#link").click(function (event) {
                    if (isLinkActive) {
                        isLinkActive = false;
                    } else {
                        window.location.hash = '';
                        event.preventDefault();
                    }
                });
            });
        </script>
    </head>
    <body>
        <a href="#test" id='link'>Link</a>
    </body>
</html>

但是我不建议依赖它来防止链接的双重使用(例如用户可以使用desactive javascript)。您应该在服务器端检查它。一种方法是在服务器端构建令牌并将其作为隐藏字段传递。然后,当用户提交时,再次检查服务器端的令牌。这样可以同时防止CSRF攻击。

另一方面,修改服务器状态的请求(在您的情况下创建订单)不应该是链接(HTTP GET方法)。这应该是POST HTTP请求。使用提交按钮和表单(这将允许您执行我之前说过的操作)。