You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为jQuery的mouseleave事件设置setTimeout延迟报错,求正确函数引用方式

问题描述

想要实现鼠标离开带tooltip的元素时,tooltip不会立即消失,以此支持hover/滚动tooltip的交互需求,因此尝试给mouseleave事件添加延迟。当前在绑定mouseleave事件时使用setTimeout(remove_toolip,1200),但调试控制台出现“guid未知错误”,推测无法正确解析remove_tooltip函数,询问如何正确引用该函数。

解决方案

1. 修正函数名拼写错误

你代码里的remove_toolip是拼写错误,正确的函数名应该是remove_tooltip,这是导致报错的核心原因之一。

2. 新增定时器ID管理

为了避免鼠标再次hover元素时,之前的延迟移除任务仍执行导致tooltip异常消失,需要保存定时器ID并在mouseenter时清除:

// 全局或当前作用域内声明定时器变量
let tooltipTimer;

$('.has-tooltip')
  .on('mouseenter', function() {
    // 清除之前的延迟任务
    clearTimeout(tooltipTimer);
    // 执行显示tooltip的逻辑
    show_tooltip($(this));
  })
  .on('mouseleave', function() {
    // 保存定时器ID,延迟1200ms执行移除操作
    tooltipTimer = setTimeout(remove_tooltip, 1200);
  });

// 确保remove_tooltip函数在当前作用域可访问
function remove_tooltip() {
  $('.tooltip').remove();
}

3. 确保函数作用域可访问

要保证remove_tooltip函数在setTimeout调用的作用域内是可访问的,如果函数是局部变量,需要调整作用域或者通过闭包确保能被正确引用。

内容的提问来源于stack exchange,提问作者V1pr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 19:54:54