【问题标题】:jQuery hover event interrupted by child <input>. Is there a way around this? (chrome issue)jQuery 悬停事件被子 <input> 中断。有没有解决的办法? (镀铬问题)
【发布时间】:2017-04-29 10:39:48
【问题描述】:

更新:感谢下面的评论,它看起来像是特定于 chrome 的问题。

有没有办法通过鼠标悬停在 jQuery 中的 &lt;input&gt; 元素上来解决悬停事件?

只有在从元素到非子元素时才淡出?

这是一个 jsfiddle,其中包含该问题的一个活生生的例子: http://jsfiddle.net/2h2Jt/3/

$(".hover").hover(function() {
    $(this).stop(true, true).animate({backgroundColor:'#aaaaaa'}, 500);
}, function() {
    $(this).stop(true, true).animate({backgroundColor: 'transparent'}, 500);
});

我正在使用 CSS,但是让这个动画工作会很棒:)

更新:已在 Mac Chrome 11.0.696.65 中修复

但对于那些在 chrome 更新之间陷入困境的人来说仍然是一个真正的问题。

【问题讨论】:

  • 该示例在 FF 中对我来说效果很好...您使用的是什么浏览器?
  • 哦,你是对的!它在 mac chrome 9.0.597.102 上。适用于我的 FF / Safari。快拍!不过,我想知道什么是好的解决方案。
  • windows chrome 也有问题,仅供参考

标签: javascript jquery html google-chrome


【解决方案1】:

这行得通:

http://jsfiddle.net/2h2Jt/140/

$(".hover").mouseover(function() {
    $(this).stop().animate({
        backgroundColor: '#aaaaaa'
    }, 500);
}).mouseout(function() {
    $(this).stop().animate({
        backgroundColor: 'transparent'
    }, 500);
});

Chrome 中的 .hover() 和文本输入似乎存在问题(尝试使用按钮输入类型的旧代码)

【讨论】:

  • JP!,了不起的人。谢谢!这应该是一个比较普遍的问题。我一直在使用 hover(),表单输入是网络的一大块。
  • 我很高兴 :) 是的,实际的问题可能是 mouseenter/mouseleave,其中 .hover(in, out) 是简写。
  • 不错的发现:D blah blah char limit
  • 自 2021 年 11 月 29 日起仍然有效,如果子元素具有可由其自身或父元素触发的悬停事件,则 chrome 仍会假发。
【解决方案2】:

您或许可以使用event.stopPropagation() 解决此问题。

$(this).children().hover(function(e) {
   e.stopPropagation();
});

【讨论】:

    猜你喜欢
    • 2019-12-12
    • 2015-03-23
    • 1970-01-01
    • 1970-01-01
    • 2011-10-31
    • 1970-01-01
    • 2017-12-23
    • 2020-01-18
    • 2021-06-03
    相关资源
    最近更新 更多