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

Bootstrap Tooltip聚焦内容时不消失 仅外部失焦才隐藏的实现问题

Bootstrap Tooltip 聚焦内容区域不隐藏解决方案

问题根因

当前配置中trigger设置为focus hover,Bootstrap默认不会将Tooltip内容区域判定为交互有效范围,当焦点或鼠标从触发元素移到Tooltip内容区时,会被判定为离开触发元素,触发自动隐藏逻辑。

调整步骤

1. 修改初始化配置

将触发方式改为手动控制,新增短延迟避免鼠标移动过程中的误隐藏,修改后初始化代码如下:

$('[data-toggle="tooltip"]').tooltip({
    container: 'body',
    boundary: 'window',
    trigger: 'manual', // 切换为手动触发,自主控制显隐逻辑
    html: true,
    delay: {show: 100, hide: 100},
    template:   
     '<div class="tooltip bs-tooltip-top" role="tooltip">'+
      '<div class="arrow"></div>'+
      '<div class="tooltip-inner">'+
      '</div>'+
    '</div>'
})

2. 绑定自定义显隐事件

通过自定义事件监听,仅当鼠标/焦点既不在触发元素、也不在Tooltip内容区时,才执行隐藏:

let hideTimer;
const $tooltipTrigger = $('[data-toggle="tooltip"]');
const tooltipClass = '.tooltip';

// 触发元素移入/聚焦时显示Tooltip
$tooltipTrigger.on('mouseenter focus', function() {
    clearTimeout(hideTimer);
    $(this).tooltip('show');
});

// 触发元素移出/失焦时延迟判定是否隐藏
$tooltipTrigger.on('mouseleave blur', function() {
    const $currentTrigger = $(this);
    hideTimer = setTimeout(function() {
        // 鼠标不在Tooltip上才执行隐藏
        if (!$(tooltipClass).is(':hover')) {
            $currentTrigger.tooltip('hide');
        }
    }, 150);
});

// 鼠标移入Tooltip时取消隐藏
$(document).on('mouseenter', tooltipClass, function() {
    clearTimeout(hideTimer);
});

// 鼠标移出Tooltip时执行隐藏
$(document).on('mouseleave', tooltipClass, function() {
    hideTimer = setTimeout(function() {
        $tooltipTrigger.tooltip('hide');
    }, 150);
});

3. 键盘兼容优化(可选)

如果需要支持键盘操作聚焦到Tooltip内容,修改template给Tooltip根元素添加tabindex="0"属性,使其可以接收焦点,再在失焦判定逻辑中补充焦点位置校验即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 15:06:04