我有以下功能。目的是当你悬停在一个类为.toolTip
的元素上时,它将在3秒后记录你正在悬停的元素的data-tooltip
。然而,如果你的光标离开了该元素,它应该取消setTimeout并不显示消息。
"Timeout set"和"Timeout cleared"消息按预期触发,但命名的函数仍会触发。我做错了什么?
$(document).on("hover",".toolTip", function() {
var toolTip = $(this);
var toolTipMessage
var hoveringNow = toolTip.attr("data-hovering-now");
if(typeof hoveringNow !== typeof undefined && hoveringNow !== false) {
toolTip.removeAttr('data-hovering-now');
clearTimeout(toolTipMessage);
console.log('Timeout cleared');
}
else {
toolTip.attr('data-hovering-now', true);
toolTipMessage = setTimeout(showToolTip, 3000, toolTip.attr("data-tooltip"));
console.log('Timeout set');
}
});
function showToolTip(message) {
console.log(message);
}
var toolTipMessage
放在hover
函数处理程序之外,否则您会在每个事件上重新定义它。我也有点困惑于使用hovering-now
数据属性来保留状态的目的,为什么不只是使用两个处理程序函数?一个用于mouseenter
,另一个用于mouseleave
? - Rory McCrossan