我正在尝试使用:
$('mydiv').delegate('hover', function() {
$('seconddiv').show();
}, function() {
//For some reason jQuery won't run this line of code
$('seconddiv').hide();
});
答案 0 :(得分:45)
User113716的优秀答案将不再适用于 jQuery 1.9 + ,因为不再支持伪事件 hover
(upgrade guide)
此外,由于绑定事件的 jQuery 3.0 delegate()
已被正式弃用,因此请使用 new on()
(docs)进行所有事件绑定。< / p>
您可以使用hover
替换mouseenter mouseleave
并切换为on()
语法,轻松迁移 user113716 的解决方案:
$('mydiv').on('mouseenter mouseleave', 'seconddiv', function(event) {
$(this).toggle( event.type === 'mouseenter' );
});
如果您的问题比简单的toggle
更复杂,我建议绑定两个单独的事件:
$('mydiv').on('mouseenter', 'seconddiv', function( event ) {
// do something
}).on('mouseleave', 'seconddiv', function( event ) {
// do something different
});
NB:由于在v1.9中删除了hover
并且在v1.7中引入了on()
,因此不需要使用{{1}的解决方案} - 但如果你因某种原因喜欢它;它仍然存在(现在)并完成工作:
delegate()
答案 1 :(得分:43)
使用delegate()
(docs),将其分配给容器,第一个参数是应该触发事件的元素。
此外,.delegate()
只接受一项功能,因此对于hover
事件,您需要测试event.type
以确定show()
(docs)或hide()
(docs)。
$('.someContainer').delegate('.someTarget','hover', function( event ) {
if( event.type === 'mouseenter' )
$('seconddiv').show();
else
$('seconddiv').hide();
});
对于显示/隐藏,更简单的方法是使用toggle()
(docs),它可以接受开关参数,其中true
表示show
和{ {1}}表示false
:
hide
请注意,$('.someContainer').delegate('.someTarget','hover', function( event ) {
$('seconddiv').toggle( event.type === 'mouseenter' );
});
事件的报告时间为mouseenter
。如果您使用的是jQuery 1.4.3
,则会将其报告为1.4.2
。
编辑:
如果我理解你的评论如下,你会有这样的事情(当然使用正确的选择器)。
mouseover
答案 2 :(得分:2)
我知道OP想要一个delegate
解决方案(当我碰到这个问题时我就是这样......)
但是经过进一步的调查后,我发现在没有 js / jquery 代码的情况下可以实现相同的目标
您只需要一点 CSS
.someContainer .seconddiv{
display : none;
}
.someContainer:hover .seconddiv{
display : block;
}
INMO它是一种更有效/更快速的解决方案
答案 3 :(得分:1)
.delegate()
没有处理。此外,您需要使用第一个参数指定要定位的元素。
你可以尝试这样的事情,但是:
$('table').delegate('tr', 'hover', function() {
$(this).toggle();
});
答案 4 :(得分:1)
编辑:删除了错误信息。
如果要在没有委托的情况下使用hover()
方法,则工作代码如下所示:
$('#mydiv').hover(function() {
$('#seconddiv').show();
}, function() {
$('#seconddiv').hide();
});
其次,delegate
是为子项分配事件处理程序,因此您需要先指定一个选择器。如果您需要确保动态添加元素的此事件处理程序存在,在这种情况下我希望.live()
和mouseenter
。
mouseleave