我使用的是live()
函数:
$('a.remove_item').live('click',function(e) {});
我需要将其更改为one()
以防止多次点击,但是当我在页面加载后注入其中一个元素时,one()
侦听器不会触发。
如何让one()
表现得像live()
?
答案 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 */ });
答案 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);
我希望它可以帮到你!