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

如何在鼠标悬停浏览器tooltip时保持弹窗表单的hover效果?

问题描述

我实现了一个鼠标悬停div时弹出的弹窗表单:悬停该div时表单显示;但在输入用户名或密码时,浏览器会弹出该站点已保存的数据提示框,当鼠标悬停此选项时表单消失。请问如何解决该问题?

浏览器自动填充提示框

现有代码

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="open-popup-btn">
  OPEN
  <div class="popup-form">
    <form>
      <input type="text" />
      <button type="submit">Submit</button>
    </form>
  </div>
</div>

CSS

.open-popup-btn {
  position: relative;
  width: 200px;
}

.popup-form {
  position: absolute;
  display: none;
  top: 100%;
  left: 0;
  top: 50px;
}

.open-popup-btn.active .popup-form {
  display: block;
}

JavaScript

$(".open-popup-btn").on("mouseenter", function() {
  $(this).addClass("active");
})

$(".popup-form").on("mouseleave", function() {
  $(".open-popup-btn").removeClass("active");
})

解决方案

这个问题的核心是:浏览器的自动填充提示框不属于页面DOM元素,当鼠标移到上面时,会触发popup-form的mouseleave事件,导致表单被隐藏。以下是几种可行的解决方法:

方法1:调整事件监听逻辑(推荐)

把事件监听从popup-form的mouseleave改成父容器open-popup-btn的mouseleave,同时判断鼠标离开的目标是否仍在弹窗或父容器范围内,只有当完全离开时才隐藏表单:

$(".open-popup-btn").on("mouseenter", function() {
  $(this).addClass("active");
});

$(".open-popup-btn").on("mouseleave", function(e) {
  const relatedTarget = e.relatedTarget;
  // 检查鼠标是否还在父容器或弹窗内部
  if (!$(this).has(relatedTarget).length && !$(relatedTarget).is(this)) {
    $(this).removeClass("active");
  }
});

方法2:禁用浏览器自动填充(如果业务允许)

给输入框添加属性,阻止浏览器弹出自动填充提示:

<input type="text" autocomplete="off" />
<input type="password" autocomplete="new-password" />

说明:部分浏览器对autocomplete="off"支持有限,autocomplete="new-password"对密码框的禁用效果更稳定。

方法3:优化CSS交互(辅助方案)

确保弹窗表单能正确接收鼠标事件,避免事件穿透:

.popup-form {
  position: absolute;
  display: none;
  top: 100%;
  left: 0;
  top: 50px;
  pointer-events: auto;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 09:25:44