javascript - 当我在 chrome 中拖动时触发单击事件
问题描述
我有一个由 div 表示的对话框,当我单击该 div 外部的某个位置时,我想关闭它。
我使用这个 JQuery 代码:
$(document).bind('click', function(e) {
var clicked = $(e.target);
if (!clicked.parents().hasClass("dialog-wrapper")) {
$('.dialog-wrapper').hide(500);
}
});
工作示例在这里:
https://jsfiddle.net/ho2p3fnc/
当我在 div 之外单击时,它可以正常工作。当我单击 div 内部时,它可以正常工作。
但是,当我从 div 内部拖动到外部并在外部释放鼠标按钮时,它会在 Chrome 外部触发单击事件
如何防止 chrome 中的这种行为?
解决方案
我会使用 2 个事件来做到这一点。一个检查点击来自哪里,另一个检查点击结束时触发。像这样的东西:
var fromDialog = true;
document.addEventListener('mousedown', function(e) {
var clicked = $(e.target);
fromDialog = clicked.parents().hasClass("dialog-wrapper");
});
document.addEventListener('mouseup', function(e) {
if(!fromDialog) {
$('.dialog-wrapper').hide(500);
}
});
推荐阅读
- python-3.x - Python 中的 UTF-16 占用 4 个字节
- java - Java:关闭特定的 JFrame 窗口
- amazon-web-services - 将 cloudwatch 日志推送到 elasticsearch 的 Cloudformation 模板
- c - 为什么我的程序会跳过 switch 指令?
- python - CSV 导入数据库
- c++ - SDL_RenderSetViewport 获取所有绘制的对象
- python - Python - 如何在一个句子中找到匹配的一个或多个单词
- dart - Flutter - 创建自己的小吃店设计
- java - java-android error.cannot.find.symbol.variable
- mysql - 加入 2 个 MySQL 表以列出所有帖子并查找特定用户 (Logged INN User) 关注的用户