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

jQuery Ajax请求中修改Bootstrap Tooltip标题不生效问题求解

根因分析

  • this指向错误:$.get()的普通回调函数内部的this默认指向全局window对象,不是触发mouseover事件的.t1元素,因此回调内的$(this)无法选中目标元素,属性修改自然不生效。而事件回调外层的this确实指向目标元素,所以外层的属性修改可以正常运行。
  • Bootstrap Tooltip内容缓存:已经初始化过的Tooltip会缓存标题内容,即使修改了data-original-title属性,也不会自动读取新值,需要手动刷新Tooltip实例。

修复方案

完整可运行代码

$(document).ready(() => {
  // 提前初始化Tooltip,设置为手动触发避免逻辑冲突
  $('.t1').tooltip({
    trigger: 'manual'
  })

  $('.t1').on('mouseover', function() {
    const $target = $(this)
    // 已加载过内容直接显示,避免重复发起请求
    if ($target.data('content-loaded')) {
      $target.tooltip('show')
      return
    }

    $.get("MyURL/playground/t1/" + $target.attr('number'), function(data) {
      // 使用外层提前保存的目标元素引用修改属性
      $target.attr('data-original-title', data)
      // 标记内容已加载
      $target.data('content-loaded', true)
      // 刷新Tooltip实例并显示最新内容
      $target.tooltip('dispose').tooltip().tooltip('show')
    })
  })

  // 鼠标移出时隐藏Tooltip
  $('.t1').on('mouseout', function() {
    $(this).tooltip('hide')
  })
})

可选的this指向修复方案

你也可以把$.get()的回调改为箭头函数,利用箭头函数继承外层作用域this的特性,不需要额外保存元素引用:

$.get("MyURL/playground/t1/" + $(this).attr('number'), (data) => {
  $(this).attr('data-original-title', data)
    .data('content-loaded', true)
    .tooltip('dispose').tooltip().tooltip('show')
})

注意事项

  • 原代码中$('document')写法错误,引号会导致选择名为document的标签元素,正确写法是$(document)
  • 增加内容加载标记可以避免用户反复悬停时重复发起相同请求,优化性能
  • 如果使用Bootstrap 5,上述Tooltip相关方法的调用逻辑完全兼容,无需额外修改

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:21:02