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

jQuery中<dt>元素绑定的事件无法触发问题排查

问题根源与修复方案

核心问题:jQuery 3.x 已移除on('hover')事件绑定支持

你遇到的问题本质是jQuery 3.x 不再允许将hover作为事件名称传递给on()方法。在旧版jQuery中,hover是mouseenter和mouseleave两个事件的快捷别名,但从jQuery 1.7开始官方就不推荐这种写法,到jQuery 3.x则彻底移除了该支持——这直接导致你绑定的<dt>悬停事件完全无法触发,看起来就像两个事件都失效了(实际上你的click事件绑定写法是正确的,只是被悬停事件的问题掩盖了)。

而hover()快捷方法依然能正常工作,是因为它内部本质是分别绑定了mouseenter和mouseleave事件,并没有依赖hover这个事件名。

修复代码

只需要把<dt>的悬停事件绑定写法替换为明确的mouseenter和mouseleave事件即可,有两种方式:

方式1:合并处理两个事件

showHideDefLists.on('mouseenter mouseleave', 'dt', function (e) {
  var dt = $(this);
  if( $.isNumeric(dt.data('time')) ) {
    // 根据事件类型切换样式类
    if (e.type === 'mouseenter') {
      dt.addClass('hover');
      dt.next('dd').addClass('hover');
    } else {
      dt.removeClass('hover');
      dt.next('dd').removeClass('hover');
    }
  }
});

方式2:分开绑定事件处理函数

// 鼠标进入时添加样式
showHideDefLists.on('mouseenter', 'dt', function () {
  var dt = $(this);
  if( $.isNumeric(dt.data('time')) ) {
    dt.addClass('hover');
    dt.next('dd').addClass('hover');
  }
})
// 鼠标离开时移除样式
.on('mouseleave', 'dt', function () {
  var dt = $(this);
  if( $.isNumeric(dt.data('time')) ) {
    dt.removeClass('hover');
    dt.next('dd').removeClass('hover');
  }
});

额外验证

你的<dt>点击事件绑定写法本身没有问题,修改完悬停事件后,点击<dt>跳转到对应视频时间点的功能也会正常生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:25:24