#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);
}