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

如何避免大范围滑动选择文本时触发div自动隐藏

问题根因

你目前绑定的click事件触发逻辑是「鼠标按下+鼠标松开」的完整动作,当你在输入框内按下鼠标选中文本、拖动到输入框外松开时,本次click事件的触发源不在.input容器内,事件冒泡到document后就会触发隐藏逻辑,原来只靠stopPropagation的方案覆盖不到这种场景。

修复代码

替换你的JS逻辑为以下代码即可:

// 标记是否在搜索容器内按下鼠标
let isMouseDownInSearch = false;

$('.input')
  .on('mousedown', () => isMouseDownInSearch = true)
  .on('click', e => e.stopPropagation());

$('.button').click(e => {
  $('.input').slideToggle('fast');
  e.stopPropagation();
})

$(document)
  .on('mousedown', () => isMouseDownInSearch = false)
  .on('click', e => {
    // 搜索区域内按下的鼠标/点击的是按钮/点击的是搜索区域内部,都不触发隐藏
    if (isMouseDownInSearch || $(e.target).closest('.button, .input').length) return;
    $('.input').slideUp('fast');
  });

逻辑说明

  • 通过标记位记录用户的鼠标按下位置,只要按下动作是在搜索容器内发生的,就算选中文本后拖动到容器外松开,也不会触发隐藏,完全匹配用户文本选中编辑的使用场景。
  • 保留原有点击区域判断逻辑,点击容器、按钮以外的区域时仍会正常隐藏搜索框,不影响原有功能。

内容的提问来源于stack exchange,提问作者Alvaro Menéndez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:51:01