【问题标题】:.hover(...) and on.("hover"...) behaving differently.hover(...) 和 on.("hover"...) 表现不同
【发布时间】:2012-05-28 19:27:39
【问题描述】:

当元素处于悬停状态时,我尝试使用 JQuery 链接几个函数。

我通常会使用 .hover 事件函数,但在阅读了一些教程后,我了解到使用 .on 更好,因为您可以使用一个事件处理程序来监控文档中的所有冒泡事件。

但是,当我像这样将两个函数链接在一起时,我遇到了问题:

$("element").on( "hover", function() {         
    console.log("one");     
}, function() {         
    console.log("two");     
});

我预计结果是 二二 (使用 .hover 时就是这种情况),但我得到的是 二二

谁能解释我做错了什么或者这是否是预期的行为以及为什么?

使用.hover(...)转载:http://jsfiddle.net/gXSdG/

使用.on(hover...)转载:http://jsfiddle.net/gXSdG/1/

【问题讨论】:

    标签: jquery hover


    【解决方案1】:

    .on() 只能接受 1 个函数,因此您必须询问传递的 event 以检查事件是什么。试试这个:

    $("element").on("hover", function(e) {
        if (e.type == "mouseenter") {
            console.log("one");   
        }
        else { // mouseleave
            console.log("two");   
        }
    });
    

    Example fiddle

    或者,您可以拆分构成 hover() 方法的两个事件 - mouseentermouseleave

    $("#element").on("mouseenter", function() {
      console.log("one");   
    }).on('mouseleave', function() {
      console.log("two");   
    });
    #element {
      background-color: black;
      height: 100px;
      margin: 100px;
      width: 100px;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div id="element"></div>

    【讨论】:

      【解决方案2】:

      您只是对最初发生的事情感到困惑,您的两个示例中都没有函数链接。 hoveron 的 API 不同,请仔细阅读它们,下面是与您的问题相关的概述:

      hover 接受一个或两个参数,都是函数。第一个在鼠标进入时运行,第二个在鼠标离开时运行。

      on 只接受一个回调,而您的第一个函数永远不会使用,因为它用于不同的参数,第二个用作回调并为所有悬停事件调用,即鼠标输入 然后鼠标离开。

      【讨论】:

      • +1 感谢您的解释,我仍然掌握 JQuery 的窍门,我真的应该更多地关注文档。
      猜你喜欢
      • 2012-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-22
      • 2018-04-25
      • 2020-09-01
      • 2016-01-18
      • 1970-01-01
      相关资源
      最近更新 更多