悬停时的Jquery不起作用

Posted

技术标签:

【中文标题】悬停时的Jquery不起作用【英文标题】:Jquery on hover not functioning 【发布时间】:2012-08-28 22:06:46 【问题描述】:

我正在更改我的代码以与 jQuery 1.8 兼容,但我坚持使用这个不起作用的 hover。当我将同样的东西与click 一起使用时,它起作用了。这是我的代码,谁能告诉我哪里出错了?

$(document).on('hover', '.top-level', function (event) 
  $(this).find('.actionfcnt').show();
  $(this).find('.dropfcnt').show();
, function () 
  $(this).find('.dropfcnt').hide('blind', function () 
    $('.actionfcnt').hide();
  );
);

【问题讨论】:

使用“鼠标悬停”而不是“悬停”会发生什么? 【参考方案1】:

自 jQuery 1.8 起已弃用:名称“hover”用作字符串“mouseenter mouseleave”的简写。它为这两个事件附加了一个事件处理程序,处理程序必须检查 event.type 以确定事件是 mouseenter 还是 mouseleave。 不要混淆“悬停”伪事件名称和 .hover() 方法,后者接受一两个函数。

来源:http://api.jquery.com/on/#additional-notes

这几乎说明了一切,你不能使用“悬停”:

$(document).on('mouseenter','.top-level', function (event) 
    $( this ).find('.actionfcnt').show();
    $( this ).find('.dropfcnt').show();
).on('mouseleave','.top-level',  function()
    $( this ).find('.dropfcnt').hide('blind', function()
        $('.actionfcnt').hide();
    );
);

【讨论】:

假设有一个 ajax 调用并且 .top-level 的内容被替换为 new 那么这个 mouseenter 也可以工作吗? @param 是的,这可以正常工作,这种语法仍然完全支持委托事件(由函数 def 时不在 DOM 中的元素触发的事件)。这将为动态生成的元素完成您想要的。 感谢您的回答 :) 刚刚使用动态内容检查了它,它的工作完美 @ParamVeer 很高兴它很有用! :) 感谢分享!工作正常 ! :)【参考方案2】:

没有“悬停”事件。 有 .hover() 函数需要 2 个回调(如您的示例中所示)。

【讨论】:

想象一下,如果所有答案都如此简洁明了。干得好!【参考方案3】:

试试:

$(".top-level").on(
    mouseenter: function (event) 
        $( this ).find('.actionfcnt').show();
        $( this ).find('.dropfcnt').show();
    ,
    mouseleave: function (event) 
        $( this ).find('.dropfcnt').hide('blind', function()
            $('.actionfcnt').hide();
        );
    
);

$(".top_level").on("hover", function(event) 
  if(event.type == "mouseenter") 
    $( this ).find('.actionfcnt').show();
    $( this ).find('.dropfcnt').show();
  
  else if (event.type == "mouseleave") 
    $( this ).find('.dropfcnt').hide('blind', function()
        $('.actionfcnt').hide();
    );
  
);

【讨论】:

【参考方案4】:

.on 函数只有 3 个参数:http://api.jquery.com/on/

如果您不需要将处理程序也绑定到动态添加的元素,那么您可以使用带有 2 个事件处理程序的旧 hover 函数。

$('.top-level').hover(function (event)  
  $(this).find('.actionfcnt').show();
  $(this).find('.dropfcnt').show();
, function (event)    
  $(this).find('.dropfcnt').hide('blind', function()
    $('.actionfcnt').hide();
  );
);​

顺便说一句,$(selector).hover(handlerIn, handlerOut)$(selector).mouseenter(handlerIn).mouseleave(handlerOut); 的简写。

如果需要,请使用on 处理mouseentermouseleave 事件:

$(document).on('mouseenter', '.top-level', function (event)  
  $(this).find('.actionfcnt').show();
  $(this).find('.dropfcnt').show();
).on('mouseleave', '.top-level', function (event)    
  $(this).find('.dropfcnt').hide('blind', function()
    $('.actionfcnt').hide();
  );
);​

【讨论】:

所以我不能使用悬停?相反,我必须使用'mouseenter' 谢谢你的回答,@n***s 都回答了。两者都是正确的,感谢您提供如此详细的解释【参考方案5】:

试试

$('.top-level').hover(function (event) 
        $( this ).find('.actionfcnt').show();
        $( this ).find('.dropfcnt').show();
, function()
        $( this ).find('.dropfcnt').hide('blind', function()
            $('.actionfcnt').hide();
        );
);

【讨论】:

以上是关于悬停时的Jquery不起作用的主要内容,如果未能解决你的问题,请参考以下文章

jQuery .css background-position-x 在悬停时更改在 IE 中不起作用

悬停时的 SVG 圆形动画不起作用

悬停时背景颜色变化不起作用(jquery)

Jquery .removeClass 在 setTimeout 内不起作用

jQuery 悬停在 WordPress 中不起作用

jquery animate 在鼠标悬停时不起作用[关闭]