1

例如,如果我有:

$("tag").hover(function () {
    $("#overlay").toggle();
});

jQuery 如何知道如何toggle在鼠标离开时取消应用更改?上面列出的代码按原样工作,但我想知道 jQuery 如何知道我在回调中所做的更改?我的问题不是我如何手动撤消更改,因为我知道该怎么做,而是 jQuery 如何知道如何自动撤消在回调函数中设置的那些更改?

4

3 回答 3

3

功能上有2个版本.hover

.hover有 2 个参数

  1. mouseenter 的处理程序
  2. mouseleave 处理程序

.hover也有单个 arg 版本[你拥有的版本]

  1. mouseenter 和 mouseleave 的处理程序

      $('something').hover(function () {
         console.log('I will be called when you mouseenter and mouseleave');
      });
    

从文档,

.hover( handlerInOut(eventObject) )Returns: jQuery

将单个处理程序绑定到匹配的元素,当鼠标指针进入或离开元素时执行。

handlerInOut(eventObject) 类型:Function() 当鼠标指针进入或离开元素时执行的函数。

于 2013-05-29T16:43:43.863 回答
3

传递一个参数.hover使回调在鼠标悬停时运行 - http://api.jquery.com/hover/#hover2

这是切换的内部实现

toggle: function( state ) {
    var bool = typeof state === "boolean";

    return this.each(function() {
        if ( bool ? state : isHidden( this ) ) {
            jQuery( this ).show();
        } else {
            jQuery( this ).hide();
        }
    });
}

由于您没有向 传递任何参数.toggle,因此 jQuery 使用此内部函数(从源代码中提取)检查元素是否隐藏:

function isHidden( elem, el ) {
    // isHidden might be called from jQuery#filter function;
    // in that case, element will be second argument
    elem = el || elem;
    return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
}
于 2013-05-29T16:44:33.400 回答
0

jQuery hover 需要 2 个函数作为参数(用于处理输入和处理输出)。

http://api.jquery.com/hover/

于 2013-05-29T16:41:45.050 回答