使用.one()和.live()jQuery

时间:2010-09-26 01:12:37

标签: jquery

我使用的是live()函数:

$('a.remove_item').live('click',function(e) {});

我需要将其更改为one()以防止多次点击,但是当我在页面加载后注入其中一个元素时,one()侦听器不会触发。

如何让one()表现得像live()

6 个答案:

答案 0 :(得分:15)

试试这个:

$('a.remove_item').live('click',function(e) {
  if($(e.target).data('oneclicked')!='yes')
  {
    //Your code
  }
  $(e.target).data('oneclicked','yes');
});

这会执行您的代码,但它也会将标记'oneclicked'设置为yes,这样它就不会再次激活。基本上只需设置一个设置即可在单击一次后停止激活。

答案 1 :(得分:15)

这是一个用于运行.live()处理程序的插件版本,纯粹是出于无聊而创建:

$.fn.liveAndLetDie = function(event, callback) {
    var sel = this.selector;
    function unbind() { $(sel).die(event, callback).die(event, unbind); }
    return this.live(event, callback).live(event, unbind);
};

它就像.live()一样(除非你需要事件数据参数,在这种情况下你需要添加重载)。只需以同样的方式使用它:

$('a.remove_item').liveAndLetDie('click', function(e) { /* do stuff */ });

You can test it out here

答案 2 :(得分:11)

只需在处理程序中使用jQuery's .die() method

示例: http://jsfiddle.net/Agzar/

$('a.remove_item').live('click',function(e) {
    alert('clicked');
   $('a.remove_item').die('click'); // This removes the .live() functionality
});​

修改

或者,如果您只想基于每个元素禁用该事件,则可以更改类名,因为live()是基于选择器的。

示例: http://jsfiddle.net/Agzar/1/

$('a.remove_item').live('click',function(e) {
    alert('i was clicked');
    $(this).toggleClass('remove_item remove_item_clicked');
});​

这会将类从remove_item更改为remove_item_clicked,这可能具有相同的样式。现在live()在第一次点击后不会触发。

答案 3 :(得分:2)

试试这个

$('a.remove_item').live('click', function(e) {
    if(!$(this).hasClass('clicked'))
    {
      $(this).addClass('clicked');
      alert("dd"); // this is clicked once, do something here
    }
});​

答案 4 :(得分:0)

我知道这是一个老帖子,但这对我来说也适用于类似案例:

$('a.remove_item').live('click', function(e) {
    e.stopPropagation();
    // Your code here
});​

答案 5 :(得分:0)

我在$ .ajax函数上使用它,所以,在最后,在我的情况下失败,我使用500,以便延迟它并停止重发多次。

}).fail(function(response, status){ alert("FAILED: "+JSON.stringify(response, null, 4)); },500);

我希望它可以帮到你!