在 jQuery mousedown 处理程序中添加覆盖层后,Internet Explorer 泄漏单击事件

2023-12-20

In a mousedowndiv 的事件处理程序创建另一个新 div 并将其附加到主体。
这个新的div有position:fixed(也可以是position:absolute)并且具有 100% 宽度和 100% 高度。因此它立即覆盖触发鼠标按下事件的源 div。 现在使用最新的 Google Chrome (v30)、最新的 Firefox (v24)、Opera v12.16,甚至在 mousedown 事件之后使用旧版 Safari v5.1.1(在 Windows 上)noclick 事件在附加到正文的事件侦听器上触发。
OnlyInternet Explorer(9 和 10)does之后触发 body 上的点击事件!为什么?如何防止这种情况发生?这实际上是 IE 中的一个错误吗?

HTML:

<div class="clickme">Click me</div>

The CSS:

.clickme {
    background-color: #BBB;
}

.overlay {
    position: fixed; /* or absolute */
    left: 0;
    top: 0;
    height: 100%;
    width: 100%;
    background-color: #000;
}

JavaScript:

$(document).on('click', function(event) {
    console.log('body click');
});

$('.clickme').on('mousedown', function(event) {
    console.log('div mousedown');
    
    var mask = $('<div></div>');
    mask.attr('class', 'overlay');
    mask.appendTo('body');
});

这是一个带有一些附加注释的示例:http://jsfiddle.net/Fh4sK/5/ http://jsfiddle.net/Fh4sK/5/

单击“Click me”div后,仅

div mousedown

应该写入控制台,但在 Internet Explorer 中它实际上是

div mousedown
body click

我很感激任何帮助!

EDIT 1:

我找到了一些描述触发点击事件的条件的资源:

http://www.quirksmode.org/dom/events/click.html http://www.quirksmode.org/dom/events/click.html:
“click - 当同一元素上发生 mousedown 和 mouseup 事件时触发。”

http://www.w3.org/TR/DOM-Level-3-Events/#events-mouseevent-event-order http://www.w3.org/TR/DOM-Level-3-Events/#events-mouseevent-event-order
“......一般来说,当关联的 mousedown 和 mouseup 事件的事件目标是同一元素且没有 mouseout 或 mouseleave 事件介入时,应该触发 click 和 dblclick 事件,并且当事件发生时,应该在最近的共同祖先上触发 click 和 dblclick 事件相关的 mousedown 和 mouseup 事件的目标是不同的。”

我不是 100% 确定现在的“正确”行为实际上应该是什么(也许 IE 是唯一能正确处理它的浏览器?)。从最后一句来看,在 body 上触发 click 事件似乎是正确的,因为 body 是两个 div 元素的“最近的共同祖先”。上面引用的 w3.org 页面上还有一些其他语句,它们描述了元素被删除时的行为,但我再次不确定这是否适用于此,因为没有元素被删除,而是被其他元素覆盖。

EDIT 2:

@Evan 打开了一份错误报告,要求微软放弃所描述的行为:https://connect.microsoft.com/IE/feedback/details/809003/unexpected-click-event-triggered-when-the-elements-below-cursor-at-mousedown-and-mouseup-events-are- different https://connect.microsoft.com/IE/feedback/details/809003/unexpected-click-event-triggered-when-the-elements-below-cursor-at-mousedown-and-mouseup-events-are-different

EDIT 3:

除了 Internet Explorer 之外,Google Chrome 最近也开始出现相同的行为:https://code.google.com/p/chromium/issues/detail?id=484655 https://code.google.com/p/chromium/issues/detail?id=484655


我也遇到了这个问题。我决定制作一个 jQuery 插件来解决这个问题并将其放在 GitHub 上。

全部都在这里了,欢迎反馈:https://github.com/louisameline/XClick https://github.com/louisameline/XClick

@mkurz:感谢您找到 W3 指令,您节省了我很多时间。 @vitalets:我解决了这个问题,因为我像你一样使用 select2 (你引导我进入这个主题)。我将分叉 select2 存储库,并给对此感兴趣的人留言。

我会看看是否可以要求微软人员看一下它,并希望改变这种烦人的点击行为。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 jQuery mousedown 处理程序中添加覆盖层后,Internet Explorer 泄漏单击事件 的相关文章

  • 有没有办法在 React 中自动播放音频而不使用 onClick 事件?

    我在尝试在 componentDidMount 中播放音频时收到此错误 未捕获 承诺中 DOMException play 失败 因为用户没有先与文档交互 componentDidMount document getElementById
  • 个人 Tumblr 帖子上的 Javascript

    我知道您可以编辑在 tumblr 博客上呈现所有帖子博客主页的 html AngularJS 但是 有什么办法可以添加自定义到各个帖子 我想在逐个帖子的基础上做一些 javascript 的东西 但似乎无法找到可以编辑代码的位置 或者 如果
  • tomcat 7.0.50 java websocket 实现给出 404 错误

    我正在尝试使用 Java Websocket API 1 0 JSR 356 中指定的带注释端点在 tomcat 7 0 50 上实现 websocket 以下是我如何对其进行编码的简要步骤 1 使用 ServerEndpoint注解编写w
  • setTimeout范围问题

    我在控制玩家重生的函数内部定义了一个 setTimeout 我正在创建一个游戏 var player death function this alive false Console log death var timer3 setTimeo
  • 为什么我需要使用 setState 回调来设置依赖于第一个项目的 setState 完成的第二个状态项目的状态?

    在此 componentDidUpdate 方法中 执行 setState 将引号设置为从 fetch 返回的内容后 我必须使用回调再次执行 setState 将 randomQuoteIndex 设置为调用 randomQuoteInde
  • 如何将本地文本文件上传到文本区域(网页内)

    我是一名新手程序员 需要一些帮助来弄清楚如何将本地文本文件上传到我正在构建的网站内的文本区域 我非常精通 HTML CSS 对 Javascript JQuery 有相当的了解 而且我刚刚学习 PHP 您能提供的任何帮助我将不胜感激 我有一
  • Ajax 内容和 jQuery 动画效果

    我正在尝试使用 jQuery 动画效果为 WordPress 帖子制作 Ajax 内容 问题是第一个动画 在本例中 fadeOut 工作正常 但第二个 FadeIn 或我尝试使用的任何动画效果没有对新内容生效 加载的内容只是出现 没有任何效
  • IE localStorage 事件失火

    在 Internet Explorer 9 和 10 中 localStorage 实现意外地触发事件 这里有很棒的线索 Chrome 的 localStorage 实现存在错误 https stackoverflow com questi
  • JQuery $.ajax() 在 java servlet 中发布数据

    我想将数据发送到 java servlet 进行处理 数据将具有可变长度并采用键 值对 A1984 1 A9873 5 A1674 2 A8724 1 A3574 3 A1165 5 数据不需要这样格式化 这就是我现在的方式 var sav
  • ES6 静态方法引用 self? [复制]

    这个问题在这里已经有答案了 我有两节课 存储库和用户存储库 我想在 Repository 中定义一个静态方法 该方法在运行时调用 UserRepository 中的静态函数 有什么干净的方法可以做到这一点吗 class Repository
  • 如何在 Javascript 中连接 C# ActiveX 事件处理程序

    我尝试使用几个代码片段将 ActiveX 对象与 Javascript 事件处理程序挂钩 我无法确定为什么事件处理程序没有被调用 带有项目的 Github 存储库 https github com JesseKPhillips Csharp
  • Javascript等待/异步执行顺序

    所以我试图把我的头脑集中在 Promise await async 上 我不明白为什么当 go 执行时 带有 finished 的警报会紧随 console log coffee 之后 当所有函数都使用等待 承诺时 为什么它只等待 getC
  • 什么时候可以使用Javascript,什么时候不可以?

    不使用太多 javascript jquery 是个好习惯吗 我们应该尽可能避免它 为了良好的可访问性 吗 什么时候可以使用 JavaScript 什么时候不能在网页设计和开发中使用 JavaScript 在什么场景 什么条件下 Updat
  • 如果 jquery 验证激活,如何在单选按钮中放置红色边框[重复]

    这个问题在这里已经有答案了 我的问题是 如果 jquery 验证像示例图片中那样激活 我无法使单选按钮具有红色边框 任何人都可以帮我解决这个问题吗 http i38 photobucket com albums e149 eloginko
  • 如何将数据推送到嵌套对象

    如何将另一个元素推入variables来自以下对象的属性 var request name Name id 3 rules name Rule name tags tagId 1 variables variable var1 matchT
  • 在 Meteor 应用程序中实现 MongoDB 2.4 的全文搜索

    我正在考虑向 Meteor 应用程序添加全文搜索 我知道 MongoDB 现在支持此功能 但我对实现有一些疑问 启用文本搜索功能的最佳方法是什么 textSearchEnabled true 在 Meteor 应用程序中 有没有办法添加索引
  • ‘state’未定义 no-undef

    我使用教程来学习 React 但我很快就陷入困境 在教程中 他们使用以下代码 import React Component from react class Counter extends Component state count 0 r
  • highchart堆积柱每个类别的总数据

    我想获取每个类别的总数据 这point stackTotal只给出活动数据的总数 从我粘贴的代码示例中 我想知道每种水果的总消耗量 因此 即使我单击右上角图例上的乔的名字 这使得堆叠图表上的所有乔信息都处于非活动状态 我仍然可以知道约翰 简
  • jQuery:如何正确使用 .stop() 函数?

    在本页面 http www arvag net old smsbox de http www arvag net old smsbox de 当您将鼠标悬停在 Informationen 和 ber ins 上时 它会显示一个子菜单 当您将
  • 如何从 Cloud Functions for Firebase 文件夹读取证书文件

    我正在尝试读取 certs 文件夹下的文件 如下所示 functions certs idp public cert perm 这是我用来读取文件的代码 fs readFileSync path join dirname certs idp

随机推荐