2011-09-29 16 views
15

Czy istnieje oficjalny sposób podłączenia do jQuery.remove(), aby można było wywołać funkcję przed/po?jQuery remove() wywołanie zwrotne?

Mam system, w którym niektóre procedury obsługi są dołączone do elementów, a czasami te elementy są usuwane (np. Widget interfejsu użytkownika, którego element główny został usunięty przez inne działanie na stronie). Jeśli procedury obsługi mogą zostać powiadomione, że ich element główny został usunięty, mogę uruchomić procedury czyszczenia nieco łatwiej.

+0

ja po prostu wyglądał na odpowiednim kodem, https://github.com/jquery/jquery/blob/master/src/manipulation.js#L168, i to jest naprawdę cienka owijka wokół parent.removeChild . Więc idź z odpowiedzią @ Drew'a. – Boldewyn

+0

Czy znalazłeś jakieś obejście, oprócz zawijania oryginalnego zdarzenia usuwania? – Mahn

Odpowiedz

5

Użyj niestandardowego zdarzenia, dołącz procedury do zdarzenia niestandardowego, które uruchamia się przed/po usunięciu. Na przykład,

$(document).bind('remove', function(event, dom){ 

    $(document).trigger('beforeRemove', [ dom ]); 
    $(dom).remove(); 
    $(document).trigger('afterRemove', [ dom ]); 
}); 

$(document).trigger('remove', 'p'); //Remove all p's 
17

można użyć jQuery.when():

$.when($('div').remove()).then(console.log('div removed')); 
+0

Niestety, może to nie jest dobra odpowiedź w tym przypadku, ale była dla mnie przydatna. –

+0

To się załatwia. – tponthieux

+3

Wykonuje to zadanie, jeśli szukasz sposobu na natychmiastowe usunięcie elementu * i wywołania wywołania zwrotnego po zakończeniu usuwania. Ale usunięcie zdarzenia w jQuery jest wydarzeniem synchronicznym, więc w tym celu odpowiedź tutaj jest zbędna: możesz osiągnąć dokładnie to samo, wykonując: '$ ('div'). Remove(); console.log ('div removed'); ' – Mahn

2

Oto sprytne Hack - może chcesz spróbować.

$('div').hide(1, function(){ 
    // callback 
    $(this).remove(); 
}); 
Powiązane problemy