javascript - 如何从元素中分离jquery事件(函数)

标签 javascript jquery events

如果我的 ajax 请求成功,我想删除这个点击事件:

  $('.el a').live('click', function(event){
    event.preventDefault();

    $.ajax({
      url: $(this).attr('href'),
      type: 'GET',      
      success: function(response){

         // how to detach this function here? (the live click event)
      }
    });
  });

最佳答案

你的问题是 live 没有绑定(bind)到任何特定的元素集,它绑定(bind)到在点击事件发生时匹配特定选择器的任何元素。这意味着您不能使用 unbindoff 来阻止点击触发处理程序。

但是,您可以稍微修改您的选择器以排除具有特定类的元素,然后添加该类以告诉 live 忽略您的元素:

$('.el a:not(.been-clicked)').live('click', function(event){
  event.preventDefault();

  var $this = $(this);
  $.ajax({
    url: $this.attr('href'),
    type: 'GET',      
    success: function(response){
      $this.addClass('been-clicked');
    }
  });
});

技术演示:http://jsfiddle.net/ambiguous/Deh5j/


Greg Pettit 的评论是正确的,如果您正在使用 jQuery 1.7,则不应再使用 live,即使在 1.6 中也有些不赞成。您通常最好使用 delegate 1.7 和 on 之前如果您使用的是 1.7:

$(document).on('click', '.el a:not(.been-clicked)', function() {
  //...
});

您仍然不能使用unbindoff 来停止此版本的on(除非在非常有限的情况下,例如您只有一个匹配 .el a 的元素,并且您只附加了一个点击处理程序(或者如果您使用命名函数)。如果您使用的是“实时”样式绑定(bind),您仍然需要类似于上面的“将类添加为标志”的技巧,如果您绑定(bind)到绑定(bind)点击处理程序时存在的一组特定元素,那么您应该根本不使用 live,您应该使用 bindclickon 之一来绑定(bind)仅处理那些特定元素;然后您可以使用 unbindoff 来分离处理程序。或者更好,您只需使用 one让 jQuery 担心分离处理程序。

关于javascript - 如何从元素中分离jquery事件(函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8199053/

相关文章:

javascript - 如何正确地将javascript嵌入到wordpress中

javascript - 将字符串从获取响应更改为数组

javascript - 自动刷新 iframe 不起作用?

delphi - "Cannot create a method for an unnamed component"

javascript - 按键检查(不触发 onkeyup)

javascript - 我可以使用 Cloudflare Workers 来批量请求吗?

javascript - ToggleClass 并非在所有 div 上

javascript - 如何检测 Materialized.js 模态关闭事件?

jQuery 单击事件未触发 - ios 主屏幕 Web 应用程序

javascript - 当使用 jQuery.Mockjax 模拟生成的 JSON 时,Backbone.Collection.fetch() 始终返回 404