2010-05-18 3 views
31

Quelqu'un connaît-il un événement onHide() ou quelque chose de similaire dans jQuery?Événement de type onHide() dans jQuery

J'ai essayé:

$(this).bind('hide', function(){ 
    console.log('asdasda') 
}) 

Mais apparemment cela ne fonctionne pas.

Modifier: Juste pour clarifier, il est caché en utilisant CSS display:none.
Je suis conscient de la fonction de rappel mais comme je ne la cache pas (le CSS l'est), je ne peux pas l'utiliser. Pour ce que ça vaut, j'ai besoin de vérifier quand une liste déroulante est visible. Il est illustré par le code CSS suivant:

ul li:hover ul { 
    display: block; 
} 
+1

http://stackoverflow.com/questions/941113/jquery-javascript-dom-visibility-event –

Répondre

10

Il n'y a pas d'événement "hide" pour tout élément HTML dans le DOM. Comment «cachez-vous» vos éléments? Utilisez-vous CSS pour modifier l'affichage ou la visibilité?

Si vous utilisez display: none pour masquer un élément, vous ne pouvez pas détecter les changements de CSS. Dans Internet Explorer, vous pouvez détecter le moment où une propriété est modifiée, mais pas les valeurs de style. Vous devez lancer un événement ou faire tout ce que l'événement fait au moment où l'affichage CSS est modifié.

+0

'display: none' – Sam

+1

Utilisation de [MutationObservers] (https://developer.mozilla.org/fr-FR/ docs/Web/API/MutationObserver) il est maintenant possible d'écouter les changements d'attributs sur les nœuds dom, y compris le style et l'attribut de classe je crois ... donc la réponse à la question devrait être * oui *. –

+0

Si vous utilisez '.css ('display', 'none')' de jQuery 'il devrait être supporté dans https://github.com/hypesystem/jquery.hide-event.js - il suffit d'écouter les événements" hide ". –

67

Il n'y a pas un natif ou construit dans l'événement « cacher », mais si vous utilisez jQuery pour le cacher, vous pouvez facilement ajouter un événement hide:

var _oldhide = $.fn.hide; 
$.fn.hide = function(speed, callback) { 
    $(this).trigger('hide'); 
    return _oldhide.apply(this,arguments); 
} 
+0

Malheureusement, je ne le cache pas, il est caché par mon CSS. – Sam

+0

Ceci est un bidouillage assez cool, mais personnellement Id remplacer plutôt core jq – John

+3

cool hack, +1 pour cela – Feanor

4

Pour toute personne qui trouve ce poste deux ans plus tard:

Vous savez exactement quand le menu est visible, non?! La règle CSS vous le dit. Ainsi, au lieu de compter sur les événements onShow ou OnHide, vous pouvez recréer la même règle en utilisant jQuery et compter sur la même « événement vol stationnaire »:

$('ul li').hover(function() { 
    // Whatever you want to do 'onShow' 
}, function() { 
    // Whatever you want to do 'onHide' 
}); 

En outre, votre script agit maintenant indépendant de toute feuille de style, afin que les détails de la présentation ne dictent pas le comportement du site (gentil).

+5

Cette solution fonctionne si la souris est la seule entrée. Si l'application prend en charge un clavier ou une interface tactile, ce n'est pas suffisant. – jbustamovej

+0

True, @jbustamovej, mais le li: hover de la question ne fonctionnera pas non plus. Bon point cependant. –

0

Cela peut être utile dans certains cas d'utilisation: Utilisation waitUntilExists plugin jquery (How to wait until an element exists?), vous pouvez détecter les changements de valeur:

$(li:hidden).waitUntilExists(function(){       
    // your code when it is hidden 
}, /*onlyOnce = */ true); 

je l'ai utilisé pour détecter quand un gif de chargement a été caché.

11

Vous pouvez passer la fonction de rappel dans la fonction masquer.

function iAmCallBackForHide() { 
      alert('I am visible after hide'); 
} 
$('#clickMeToHide').hide(iAmCallBackForHide); 
+0

Ceci est la réponse la plus appropriée. Bang Bang! – plushyObject

1

En jQuery 3 expose les événements "hide" et "show".

$(document).on("hide", function() { 
    console.log("browser page has been hidden"); 
}); 
+0

C'est gentil, mais je ne cours pas 3, mais c'est bon pour les gens futuristes: D – plushyObject

+0

Ne fonctionne pas pour moi malheureusement. – Glapa

2

J'ai récemment fait un plugin pour détecter un élément qui est caché ou montré de quelque manière que (par noyau javascript ou de l'inspecteur ou jQuery cacher/montrer).

pratik916/jQuery-HideShow

Cette extension continue à regarder sur l'élément de changement de visibilité.une fois changé il Emmit un événement où vous pouvez gérer vos affaires

$("#test_hidden").hideShow(function(e, visibility){ 
    if(visibility == "shown") { 
     console.log("Element is visible"); 
    } else { 
     console.log("Element is hidden"); 
    } 
})