如何从锚链接中删除click事件?

时间:2015-12-02 12:51:45

标签: javascript jquery

我一直在对此进行一些研究,到目前为止,我已经能够找到它只能删除事件监听器。不是实际的事件。例如,我有一个锚链接,点击一次后。我不希望用户能够再次点击它。我怎么能这样做呢?

我的设置非常简单:

      <script>

            $(document).on('click', '.prevPage', function () {
    alert("In");
    if (parseInt($('.nextPage').attr('rel')) > 2) {
        //TAKE OFF CLICK    
        currentPage -= 1;
        rowsShown = $('.pageSize').val();
        skip = (currentPage * rowsShown) - rowsShown;
        GetMoreData(skip, 2);
    }
});

function RePager(skip, btnClicked) {
    /* ** NEED TO WORK OUT THE INPUT BOX ** */
    if (ReportType() == 2) {
        var FilteredData = $('.BoolFiltered').val();
        var totalPages = GetTotalPages();
        if (totalPages == 0) {
            totalPages = 1;
        }
        var newPrevPage = currentPage - 1;
        var newNextPage = currentPage + 1;
        /*
        1 - First Page 
        2 - Prev Page
        3 - Next Page
        4 - Last Page
        4+ - Ajax filter
        */
        switch (btnClicked) {
            case 1:
                $('.prevPage').attr('rel', 1);
                $('.nextPage').attr('rel', 2);
                $('.lastPage').attr('rel', totalPages);
                $('.pagedisplay').val(currentPage + '/' + totalPages);
                break;
            case 2:
                $('.prevPage').attr('rel', newPrevPage);
                $('.nextPage').attr('rel', newNextPage);
                $('.lastPage').attr('rel', totalPages);
                $('.pagedisplay').val(currentPage + '/' + totalPages);
                //PUT CLICK BACK ON
                break;
            case 3:
                $('.prevPage').attr('rel', newPrevPage);
                $('.nextPage').attr('rel', newNextPage);
                $('.lastPage').attr('rel', totalPages);
                $('.pagedisplay').val(currentPage + '/' + totalPages);
                break;
            case 4:
                $('.prevPage').attr('rel', totalPages - 1);
                $('.nextPage').attr('rel', totalPages);
                $('.lastPage').attr('rel', totalPages);
                $('.pagedisplay').val(totalPages + '/' + totalPages);
                break;
            default:
                currentPage = 1;
                $('.prevPage').attr('rel', 1);
                $('.nextPage').attr('rel', 2);
                $('.lastPage').attr('rel', totalPages);
                $('.pagedisplay').val(currentPage + '/' + totalPages);

        }

    }
}


        </script>

<body>
    <a class="prevPage">WORK</a>
</body>

编辑:我将详细介绍。用户点击事件后,我想禁用点击。函数结束后,我想让用户再次单击该按钮。我总是可以改变课程名称,但我不想这样做,我宁愿找到更优雅的解决方案。

编辑2:检查以上代码是否存在实际问题

4 个答案:

答案 0 :(得分:6)

您可以改为使用.one()

$(document).one('click', '.test', function(e) {
  $('pre').append(e.type+'ed');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a class="test">WORK</a>
<br>
<pre></pre>

根据您的修改:

您可以使用.on()绑定事件,并使用.off()取消绑定。像这样的东西:

function bindClick(e) {
  $('pre').append(e.type + 'ed');
  $(document).off('click', '.test', bindClick); // unbound click
  setTimeout(function() {
    $(document).on('click', '.test', bindClick); // bound again after 2 sec
  }, 2000);
}

$(document).on('click', '.test', bindClick); // bound click
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a class="test">WORK</a>
<br>
<pre></pre>

答案 1 :(得分:4)

最简单的方法是使用CSS而不是尝试删除侦听器和什么不是。

jQuery有一个.addClass()函数可以使用。

CSS示例

.disabled {
   pointer-events: none;
   cursor: default;
}

然后是您的脚本代码

$(document).ready(function () {
   $(".test").click(function () {
     $(this).addClass("disabled");
   });
});

这样你就可以轻松地.removeClass()

答案 2 :(得分:3)

你最初需要把它包装成dom。否则,脚本将在元素在dom上准备好之前运行。然后,您可以使用event.preventDefault()禁用正常点击。

 $(document).ready(function () {
   $(".test").click(function (e) {
     e.preventDefault();
   });
 });

答案 3 :(得分:0)

$(document).on('click', '.test', function (e) {
      e.preventDefault();
      $(this).off("click");
});

使用.off

$(document).off('click', '.test');