为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
相关产品推荐
相关产品推荐

