2010-05-18 58 views
31

有没有人知道jQuery中的onHide()事件或类似事件?jQuery中的onHide()类型事件

我想:

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

但显然不起作用。

编辑: 只是为了澄清,它使用CSS display:none隐藏。
我知道回调函数,但因为我没有隐藏它(CSS是)我无法使用它。 对于它的价值,我需要检查何时可以看到下拉列表。它由以下CSS显示:

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

http://stackoverflow.com/questions/941113/jquery-javascript-dom-visibility-event – 2010-05-18 14:00:19

回答

10

DOM中的任何HTML元素都没有“隐藏”事件。你如何“隐藏”你的元素?您是否使用CSS来更改显示或可见性?

如果您使用display:none来隐藏元素,则无法检测到CSS更改的时间。在IE中,您可以检测属性更改的时间,但不会扩展到样式值。您需要抛出一个事件,或者在CSS显示更改时做任何事件。

+0

'display:none' – Sam 2010-05-18 14:15:10

+1

使用[MutationObservers](https://developer.mozilla.org/en-US/) docs/Web/API/MutationObserver)现在可以侦听dom节点上的属性变化,包括我相信的样式和类属性......所以问题的答案应该是*是*。 – 2013-12-29 19:37:56

+0

如果你正在使用jQuery的'.css('display','none')'它应该在https://github.com/hypesystem/jquery.hide-event.js中支持 - 只需要听取“隐藏”事件。 – 2014-01-13 17:23:09

67

没有本地或内置的“隐藏”的事件,但如果你正在使用jQuery来隐藏它,你可以轻松地添加一个隐藏事件:

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

不幸的是我没有隐藏它,它被我的CSS隐藏起来。 – Sam 2010-05-18 14:16:11

+0

这是一个非常酷的黑客攻击,但个人身份证相当于覆盖核心jq – John 2012-12-05 17:13:09

+3

很酷的黑客攻击,+1对于那个 – Feanor 2013-06-27 13:36:45

4

对任何人来说,两年后发现这篇文章:

你知道菜单何时可见,对吗? CSS规则告诉你。因此,而不是依靠昂秀或onHide事件,您可以使用jQuery重建非常相同的规则和依靠同样的“悬停事件”:

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

另外,你的脚本现任独立于任何样式的,因此演示文稿细节不会规定网站行为(很好)。

+5

如果鼠标是唯一的输入,则此解决方案有效。如果应用程序支持键盘或触摸界面,那么这是不够的。 – jbustamovej 2013-10-10 21:58:33

+0

正确,@ jbustamovej,但li:从问题悬停也不会工作。虽然好点。 – 2014-07-31 19:42:05

0

这可以在一些使用情况下非常有用: 使用waitUntilExists jQuery插件(How to wait until an element exists?),你可以当值变化来检测:

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

我用它当加载GIF被隐藏检测。

11

您可以在隐藏功能中传递回调函数。

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

这是最正确的答案。嘭嘭! – plushyObject 2017-05-09 18:18:34

1

在jQuery 3公开了一个“隐藏”和“显示”事件。

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

这很好,但我没有运行3,但这对未来的人很好:D – plushyObject 2017-05-09 18:19:23

+0

不幸的是我不适合。 – Glapa 2017-11-07 01:16:22

2

我最近提出一个插件,当一个元件被隐藏或显示以任何方式来检测(通过核心JavaScript或检查员或jQuery的隐藏/显示)。

pratik916/jQuery-HideShow

这个扩展能够看能见度变化元件上。一旦改变就会emmit一个事件,你可以处理你的东西

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