本文详解解决因 css `:focus` 隐藏逻辑与 js 点击事件冲突导致图片 src 无法写入文本框的问题,提供基于 jquery 的可靠显示/隐藏控制方案,并附可直接运行的完整代码。
在构建带图像预览功能的搜索输入组件时,常见需求是:用户点击下拉菜单中的缩略图,自动将该图片的 src 地址填入上方文本框(如用于后续搜索或路径引用)。但实践中常遇到「点击无响应」问题——表面看是 JS 函数未执行,实则根源在于 CSS 的 #imglookupbox:focus + .dropdown .dropdown-menu { display: block; } 规则与浏览器焦点切换机制冲突。
当用户点击 时,焦点会瞬间从 移出,触发 CSS 隐式隐藏 .dropdown-menu;而 JS 的 onclick 事件需在 DOM 元素仍可见且可交互状态下才能可靠触发。由于 CSS 隐藏是同步、瞬时的,event.target 往往已失效或取不到预期 src 属性。
✅ 正确解法:将菜单显隐逻辑完全交由 JavaScript 控制,避免依赖不可靠的 CSS :focus 伪类联动。以下是优化后的完整实现:
此方案已在 Chrome/Firefox/Edge 及主流移动端浏览器验证稳定,兼顾功能性、可维护性与可访问性,是构建图像选择型搜索输入组件的生产级实践。