【发布时间】:2016-02-10 11:53:23
【问题描述】:
我有以下功能。目的是当您将鼠标悬停在具有 .toolTip 类的项目上时,它将在 3 秒后从您悬停的元素中记录 data-tooltip。但是,如果您的光标离开项目,它应该取消 setTimeout 并且不显示消息。
“超时设置”和“超时清除”消息按预期触发,但命名函数仍然触发。我做错了什么?
$(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?
标签: javascript jquery settimeout cleartimeout