Отслеживание событий jQuery

#javascript #jquery

#javascript #jquery

Вопрос:

в какой-то функции я удаляю подобный элемент $('#' id ' img.load').remove(); , как я могу отследить это событие и запустить пользовательский код?

Ответ №1:

 (function($){
  var remove_orig = $.fn.remove;

  $.fn.remove = function(){
    console.log('Remove called');
    remove_orig.apply(this, arguments);
  };
})(jQuery);
  

Вы можете «подключиться» к любой функции jQuery и поместить в нее свой собственный код обработки (включая методы ведения журнала), который будет выполняться до выполнения собственного кода jQuery.

демо (другая версия с показанным селектором)


Уловить удаление легко, используя описанную выше перегрузку. Просто измените хук, чтобы запустить триггер до (или после) того, как jQuery доберется до него:

 (function($){
  var remove_orig = $.fn.remove;

  $.fn.remove = function(){
    this.trigger('removing');
    remove_orig.apply(this, arguments);
  };
})(jQuery);

$('#foo').bind('removing',function(e){
    alert('#foo is being removed');
});

$('#foo').remove();
  

Комментарии:

1. но как я могу проверить, какой элемент был удален? Потому что, если я правильно понимаю, этот код выполняется при каждом удалении любого элемента

2. @Yekver повторите их внутри новой функции — $(this).each(...)

3. @Yekver: Смотрите вторую демонстрацию, она показывает, как вы можете получить, какие элементы были удалены, путем доступа к используемому селектору.

4. @Yekver: Вот другая версия приведенного выше создания removed события, к которому вы можете привязаться: jsfiddle.net/bVYWS/2

Ответ №2:

Один из способов — «запустить» пользовательское событие (в этом примере я использую window):

 $('#' id ' img.load').remove();
$(window).trigger("MyElementRemoved", [id]);
  

Затем в другой части вашего кода «обработайте» событие:

 $(window).bind("MyElementRemoved", function(e, elementId) {
   alert("element removed: "   elementId);
}