使用on()和hover - jQuery

时间:2013-03-01 09:48:17

标签: jquery hover

这就是我所拥有的:

$('#blah').hover(function(){
    $('etc').show();
}, function(){
    $('etc').hide();
});

这很好用,现在我希望上面的代码与on()方法一起使用:

$('#blah').on('hover', function(){
    $('#etc').show();
}, function(){
    $('#etc').hide();
});

但这不起作用,有人知道为什么吗?但这也有效:

$('#blah').on('hover', function(){
    $('#etc').show();
});

当我使用on()方法时,回调函数不起作用,所以我在on()上使用mouseover()和mouseleave()并且它正在工作,我只是想知道为什么悬停回调不是使用on(),这比使用2个事件简单....

由于

7 个答案:

答案 0 :(得分:3)

来自Jquery docs。 Jquery on

  

从jQuery 1.8开始不推荐使用:名称“hover”用作简写   字符串“mouseenter mouseleave”。它附加一个事件处理程序   对于这两个事件,处理程序必须检查event.type   确定事件是否为mouseenter或mouseleave。不要   将“hover”伪事件名称与.hover()方法混淆   接受一个或两个功能。

$("div.test").on({
  mouseenter: function(){
    $(this).addClass("inside");
  },
  mouseleave: function(){
    $(this).removeClass("inside");
  }
});

答案 1 :(得分:2)

JQuery源代码中,hover未包含在触发导致JQuery的事件列表中.on()

jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
    "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
    "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {

    // Handle event binding
    jQuery.fn[ name ] = function( data, fn ) {
        return arguments.length > 0 ?
            this.on( name, null, data, fn ) :
            this.trigger( name );
    };
});

这是因为.hover()只是JQuery .mouseenter().mouseleave()的快捷方式

jQuery.fn.hover = function( fnOver, fnOut ) {
    return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
};

我希望这个简短的解释几乎无法提供指导。

答案 2 :(得分:1)

使用mouseenter和mouseleave进行悬停。使用悬停在here上进行检查。

$("#blah").on(
{
    mouseenter: function() 
    {
        //stuff to do on mouseover
    },
    mouseleave: function()
    {
        //stuff to do on mouseleave
    }
});

使用切换显示/隐藏,

$('#blah').on('hover', function(){
    $('#etc').toggle();
});

答案 3 :(得分:1)

这是因为hover实际上不是一个浏览器事件,实际上它只是一个调用的简写

 $(selector).mouseenter(handlerIn).mouseleave(handlerOut);

从版本1.8开始,使用.on('hover')表单have been deprecated

答案 4 :(得分:0)

使用

 jQuery.on("hover","#blah", function..)

或者你也可以使用jQuery的切换功能

答案 5 :(得分:0)

是的,它不起作用,因为当.on()hover一起使用时,hover事件只有一个回调函数,而您可以在.on() <中使用多个事件/ p>

尝试

$("DOM").on({
    mouseenter: function() {
        // Handle mouseenter...
    },
    mouseleave: function() {
        // Handle mouseleave...
    }
});

答案 6 :(得分:0)

使用toggle()

$('#blah').on('hover', function(){
   $('#etc').toggle();
});