例如,如果我有:
$("tag").hover(function () {
$("#overlay").toggle();
});
jQuery 如何知道如何toggle
在鼠标离开时取消应用更改?上面列出的代码按原样工作,但我想知道 jQuery 如何知道我在回调中所做的更改?我的问题不是我如何手动撤消更改,因为我知道该怎么做,而是 jQuery 如何知道如何自动撤消在回调函数中设置的那些更改?
例如,如果我有:
$("tag").hover(function () {
$("#overlay").toggle();
});
jQuery 如何知道如何toggle
在鼠标离开时取消应用更改?上面列出的代码按原样工作,但我想知道 jQuery 如何知道我在回调中所做的更改?我的问题不是我如何手动撤消更改,因为我知道该怎么做,而是 jQuery 如何知道如何自动撤消在回调函数中设置的那些更改?
功能上有2个版本.hover
,
.hover
有 2 个参数
.hover
也有单个 arg 版本[你拥有的版本]
mouseenter 和 mouseleave 的处理程序
$('something').hover(function () {
console.log('I will be called when you mouseenter and mouseleave');
});
从文档,
.hover( handlerInOut(eventObject) )Returns: jQuery
将单个处理程序绑定到匹配的元素,当鼠标指针进入或离开元素时执行。
handlerInOut(eventObject) 类型:Function() 当鼠标指针进入或离开元素时执行的函数。
传递一个参数.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 );
}
jQuery hover 需要 2 个函数作为参数(用于处理输入和处理输出)。