JavaScript问题:点击外部关闭Popup,需避免点击Popup后移至外部松开触发关闭
问题解决:Chrome中拖动Popup内容到外部松开误关闭的问题
问题原因
Chrome与Firefox对click事件的触发目标处理存在差异:当你在Popup内容区按住鼠标左键拖动到容器(遮罩层)上松开时,Chrome会将click事件的target设为容器元素,触发了关闭逻辑;而Firefox会保持target为初始按下的内容区元素,因此不会误关闭。
解决方案
方案1:改用mousedown事件(推荐)
mousedown事件在按下鼠标时触发,目标是按下瞬间的元素,不受后续拖动操作影响,直接替换即可解决问题:
$("#popup-container").mousedown(function(e) { if (e.target.id === "popup-container") { $(this).css("visibility", "hidden"); } });
方案2:记录初始点击区域(兼容click事件)
如果需要保留click事件逻辑,可以通过记录鼠标按下时的区域,在点击时验证是否为容器直接触发:
let isClickedInPopup = false; // 标记是否在内容区按下鼠标 $("#popup").mousedown(function() { isClickedInPopup = true; }); $("#popup-container").click(function(e) { // 仅当未在内容区按下,且点击的是容器时才关闭 if (!isClickedInPopup && e.target.id === "popup-container") { $(this).css("visibility", "hidden"); } // 重置标记 isClickedInPopup = false; });
内容的提问来源于stack exchange,提问作者Black
相关产品推荐
相关产品推荐

