设置超时仍然触发,尽管清除超时
setTimeout still fires despite clearTimeout
我有以下函数。目的是当您将鼠标悬停在具有类 .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);
}
您的变量toolTipMessage
仅存在于悬停时执行的函数的执行上下文中,下次悬停该元素时,该变量不再存在(或者,更准确地说,您有一个同名的不同变量)。
要使变量在执行之间持久存在,您需要在封闭的执行上下文中定义该变量 - 例如在hover
处理程序之外。
var toolTipMessage = null;
$(document).on("hover",".toolTip", function() {
....
});
相关文章:
- Typeahead Bloodhoud没有't在TTL超时后清除缓存
- 清除启动范围外的超时
- 清除设置超时之前的间隔将不起作用
- 清除关闭中的超时
- 清除超时多次设置超时
- 清除在 jQuery 插件中启动的非全局超时
- 清除选择更改()的超时
- 奇怪的设置超时清除行为与jQuery AJAX
- 设置超时和清除交替点击超时
- 清除超时的问题
- 是否需要在运行后清除超时或最佳做法
- 设置间隔和设置超时清除
- 设置超时仍然触发,尽管清除超时
- 在 javascript 中,当网页未最小化或打开新选项卡时,清除超时前的计时器
- JavaScript 清除循环中的超时
- 一旦超时执行,清除或重新分配分配给 setTimeout 返回值的变量是否有任何技术点
- 清除运行时在它自己的函数中的超时
- JavaScript:数组中的多个清除超时
- 清除消息 jQuery 延迟设置超时
- 使用悬停超时浏览表行时清除隐藏值