javascript - jQuery - 如何在事件触发后暂时禁用 onclick 事件监听器?

标签 javascript jquery ajax events onclick

如何在事件触发后暂时禁用 onclick 事件监听器(首选 jQuery)?

例子:

在用户点击按钮并触发下面的这个函数后,我想禁用 onclick 监听器,因此不会向我的 django View 触发相同的命令。

$(".btnRemove").click(function(){
   $(this).attr("src", "/url/to/ajax-loader.gif");
   $.ajax({
        type: "GET",
        url: "/url/to/django/view/to/remove/item/" + this.id,
        dataType: "json",
        success: function(returned_data){
            $.each(returned_data, function(i, item){
              // do stuff                       
     });
   }
});

非常感谢,

奥尔多

最佳答案

有很多方法可以做到这一点。例如:

$(".btnRemove").click(function() {
    var $this = $(this);
    if ($this.data("executing")) return;
    $this
        .data("executing", true)
        .attr("src", "/url/to/ajax-loader.gif");
    $.get("/url/to/django/view/to/remove/item/" + this.id, function(returnedData) {
        // ... do your stuff ...
        $this.removeData("executing");
    });
});

$(".btnRemove").click(handler);

function handler() {
    var $this = $(this)
        .off("click", handler)
        .attr("src", "/url/to/ajax-loader.gif");
    $.get("/url/to/django/view/to/remove/item/" + this.id, function(returnedData) {
        // ... do your stuff ...
        $this.click(handler);
    });
}

我们还可以使用事件委托(delegate)来获得更清晰的代码和更好的性能:

$(document).on("click", ".btnRemove:not(.unclickable)", function() {
    var $this = $(this)
        .addClass("unclickable")
        .attr("src", "/url/to/ajax-loader.gif");
    $.get("/url/to/django/view/to/remove/item/" + this.id, function(returnedData) {
        // ... do your stuff ...
        $this.removeClass("unclickable");
    });
});

如果我们不需要在处理程序执行后重新启用它,那么我们可以使用.one() 方法。它绑定(bind)只执行一次的处理程序。请参阅 jQuery 文档:http://api.jquery.com/one

关于javascript - jQuery - 如何在事件触发后暂时禁用 onclick 事件监听器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1921855/

相关文章:

jquery - Extjs 与 Devexpress ChartJS

javascript - 将javascript变量添加到javascript src?

javascript - 在reactjs中通过不同的id从api获取数据

javascript - Meteor Router中的异步调用闪烁其他模板

javascript - 如何减慢主页上横幅的转换速度? CSS

javascript - 在附加 html 代码之前替换图像 src

javascript - 加载脚本后调用javascript函数

javascript - 使用 ajax 分页的 Google Rich Snippet

javascript - 如何在没有页面源且没有 JSON 的情况下使 AJAX 读回响应?

javascript - 通过 ajaxsetup 发布带有附加参数的表单序列化数据