2011-10-03 125 views
4

在某些函数中我删除了像这样的元素$('#'+id+' img.load').remove();,我如何跟踪这个事件并运行自定义代码?JQuery事件跟踪

回答

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

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

你可以在任何jQuery函数“钩子”和内把你自己的处理代码(包括测井方法(S))将执行之前执行本地jQuery代码

demo(另一个版本与selector shown


捕捉去除是容易使用上述过载。简单地改变钩火之前(或之后)触发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(); 
+0

哇。这是很好的解决方案。 – genesis

+0

但我怎样才能检查什么元素被删除?因为如果我理解正确,这段代码在每次删除任何元素时运行。 – Yekver

+0

@Yekver在新函数中迭代它们 - '$(this).each(...)' – Alnitak

3

一种方式是“触发”自定义事件(在这个例子中,我使用的是Window):

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

然后在你的代码的另一部分“处理”事件:

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