Использование .one() с .live() jQuery
Я использовал функцию live()
:
$('a.remove_item').live('click',function(e) {});
Мне нужно было изменить это на one()
, чтобы предотвратить несколько кликов, однако, когда я вставляю один из этих элементов после загрузки страницы, прослушиватель one()
не запускается.
Как я могу заставить one()
вести себя как live()
?
Ответы
Ответ 1
Попробуйте следующее:
$('a.remove_item').live('click',function(e) {
if($(e.target).data('oneclicked')!='yes')
{
//Your code
}
$(e.target).data('oneclicked','yes');
});
Выполняет ваш код, но он также устанавливает флаг "oneclicked" как "да", чтобы он не активировался снова. В основном просто устанавливает параметр, чтобы остановить его от активации после его однократного нажатия.
Ответ 2
Здесь версия плагина для запуска обработчика .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 */ });
Вы можете проверить это здесь.
Ответ 3
Просто используйте jQuery .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
});
EDIT:
Или, если вы хотите отключить событие только для каждого элемента, вы можете просто изменить имя класса, так как 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()
не будет срабатывать после первого щелчка.
Ответ 4
Попробуйте это
$('a.remove_item').live('click', function(e) {
if(!$(this).hasClass('clicked'))
{
$(this).addClass('clicked');
alert("dd"); // this is clicked once, do something here
}
});
Ответ 5
Я знаю, что это старый пост, но это сработало для меня в аналогичном случае:
$('a.remove_item').live('click', function(e) {
e.stopPropagation();
// Your code here
});
Ответ 6
Я использую его для функции $.ajax, поэтому в финале, в моем случае не удается, я использую 500, чтобы отложить его и перестать повторять много раз.
}).fail(function(response, status){
alert("FAILED: "+JSON.stringify(response, null, 4));
},500);
Надеюсь, это поможет вам!