11
votes

Observer les changements d'affichage dans JQuery

est-il possible d'ajouter un observateur à un élément DOM déclenché sur les modifications apportées à la visibilité (c'est-à-dire des appels vers show () et masquer () )? Merci!


1 commentaires

Je me demande si vous pouvez essayer ceci pour style.display? Stackoverflow.com/Questions/ 1029241 / ...


4 Réponses :


1
votes

Il n'est pas possible de sortir de la boîte que je connaisse, mais si des modifications se produisent via JQuery, vous pouvez facilement ajouter vous-même le suivi en utilisant un événement personnalisé comme celui-ci:

// save the jquery.show() method
$.prototype.base_show = $.prototype.show;
// provide your own that trigger the event then call the original one
$.prototype.show = function(speed, easing, callback) {
    // call your custom event, add any parameters you need there
    $(window).trigger('on_jquery_show'/*, params you need*/);
    // now call the "real" show method
    $.prototype.base_show(speed, easing, callback);
    // return this so you can chain it
    return this;
};
// add some callback to that custom event
$(window).bind('on_jquery_show', function() { console.log('show !'); });
// it works !
$('#some_div').show().show();


0 commentaires

0
votes

Oui, vous pouvez:

Par exemple: P>

 $('#divID').show('slow', function() {
    // Animation complete.
 });


1 commentaires

Alors comment utiliser: $ ('# divid'). Afficher ('lent', fonction () {// Animation complète.}); ont appelé si vous faites par exemple faire tout ce que vous faites. > div s visible avec: $ ('div'). Afficher (); ? C'est un rappel sur l'achèvement de ce spectacle particulier / masquage, pas un auditeur d'événement qui surveille les modifications apportées à la visibilité de cet élément.



8
votes

Si vous souhaitez observer tout appel à .Show () ou .hide () et avoir accès à jQuery 1.5+ que vous pourriez avoir pu Utilisez jquery.sub () pour créer une copie de la jQuery objet de remplacement de la valeur par défaut .show () ou hide () actions. xxx

puis à l'aide du . () copier xxx

exemple sur jsfiddle


1 commentaires

+1 Excellente réponse. Je n'avais pas encore vu cela à JQuery 1.5+. Je vais certainement l'utiliser à un moment donné de l'avenir pas trop lointain.