jQuery是否有.delegate('hover')的句柄?

时间:2011-01-23 04:21:59

标签: jquery delegates handler

我正在尝试使用:

$('mydiv').delegate('hover', function() {  
    $('seconddiv').show();  
}, function() {  
    //For some reason jQuery won't run this line of code  
    $('seconddiv').hide();  
});

5 个答案:

答案 0 :(得分:45)

User113716的优秀答案将不再适用于 jQuery 1.9 + ,因为不再支持伪事件 hoverupgrade 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