2011-12-05 12 views
10

Czy można uzyskać powiadomienie o zdarzeniu, gdy element został wyblakły przy użyciu jQuery? To znaczy. jeśli istnieje „fadeInEvent” Chciałbym spróbować czegoś podobnegojQuery fadeIn event?

$('elements').delegate('selector', 'fadeInEvent', function() { 
    alert('someId has faded in'); 
}); 

Wiem, że istnieje funkcja zwrotna dla jQuery.fadeIn(), np

$('#someId').fadeIn('fast', function() { 
    alert('callback when someId has faded in'); 
}); 

ale wolałbym raczej użyć rozwiązania zdarzenia, jeśli to możliwe. Zrobiłem też kilka prototypów używając :visible, ale zwraca się przed zakończeniem zanikania true.

Odpowiedz

12

można trigger zdarzenia niestandardowego w zwrotnego:

$("#someId").fadeIn("fast", function() { 
    $(this).trigger("fadeInComplete"); 
}); 

imprezy będzie bańka górę drzewa DOM jak większość zdarzeń, dzięki czemu można uchwycić go na każdy z elementów przodków z on (jQuery 1.7+) bind lub delegate:

$("#someAncestor").on("fadeInComplete", function() { 
    //Element has finished fading in. 
}); 
+0

Dzięki, to rozwiązuje mój problem. Na razie używam 'bind', ponieważ projekt używa obecnie jQuery 1.6.4. – matsev

4

Można zapewnić, że w każdym zwrotnego możesz przekazać do metody fadeIn podnieść odpowiednie zdarzenie, lub można małpa patch exising metody jQuery fadeIn zawsze podnieść fadeInEvent w zwrotnego, np:

(function($) { 
    var jQueryFadeIn = $.fn.fadeIn; 
    var newFadeIn = function(speed, callback) { 
    var newCallback = function() { 
     if (callback) { 
      callback.apply(this, arguments); 
     } 
     $(this).trigger('fadeInComplete'); 
    }; 
    jQueryFadeIn(speed, newCallback); 
    }; 
    $.fn.fadeIn = newFadeIn; 
})(window.jQuery); 
+0

@Downvoters, dlaczego? –