- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当这个元素被中间点击时:
// Allow middle button click to open client in another tab.
$(document).on('mousedown', '.clientlist-edit', function (event) {
if (event.which === 2) {
event.preventDefault();
var url = $(this).attr('href');
url = url.toLowerCase().replace('/addedit', '/clientindex');
window.open(url, '_blank');
return false;
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a class="clientlist-edit" href="/Clients/Management/AddEdit/4ffac190-72d2-476a-b0be-a9d90097272a">
<i class="glyphicon glyphicon-pencil"></i> <strong class="title">Client Name</strong>
</a>
调用此处理程序,当它到达 window.open
时,将打开两个选项卡。第一个是所需的 URL(变量 URL
)。第二个是在不希望的 anchor 元素上设置的原始 href。我正在调用 preventDefault
。我错过了什么?
它是可重现的。请参阅下面的链接。有时是两次中间点击。这是一个中间点击。它只发生在 Firefox 中。
https://jsfiddle.net/jsmunroe/eap1b6k7/3/
我使用的是 Firefox 68.0.2。
最佳答案
我想您的目标是拦截试图在新选项卡中打开链接的用户,而不是在新选项卡中打开一个不同链接。如果我是正确的,那么您将需要在几个关键方面调整您的策略:
不要使用mousedown
点击事件由鼠标按下和鼠标弹起事件触发。这意味着通常您必须在任何点击类型发生之前按下并释放按钮,无论是导航(左键单击)还是上下文菜单(右键单击)或在新标签页中打开(单击鼠标中键)。如果您尝试使用 mousedown 来模拟此操作,您会感觉很奇怪 - 操作发生得太快了!
此外,正如您现在观察到的那样,它不会正常工作:相应的点击事件仍会在您的处理程序运行后发生,因为您没有取消正确的事件。您的 preventDefault()
/return false
完成了什么?好吧,尝试按住中间按钮并拖动:大多数浏览器可能会在您移动鼠标时平移 View ,但是如果您在“中间单击我”元素上尝试此操作……什么也没有发生。是的,您只是成功地让您的页面在滚动时更加烦人。
请务必使用 auxclick
事件。
我猜您首先选择了 mousedown
,因为您观察到当您捕获 click
事件时没有触发中间点击。几年前,click
可以正常工作 - 但现在,click
只会触发 primary 鼠标按钮。 这是一件好事!太多的人无意中通过捕获 click
阻止了右键单击和中间单击,而他们只想捕获左键单击。据推测,如果您正在捕获 auxclick
,您就会知道自己在做什么,并且可以相信可以正确处理它。 (所以,你知道……一定要小心)
The w3c actually has rather good documentation on all of this ,所以如果我没有链接到它并在此处引用相关位,那将是我的疏忽:
The click event should only be fired for the primary pointer button (i.e., when button value is 0, buttons value is 1). Secondary buttons (like the middle or right button on a standard mouse) MUST NOT fire click events. See auxclick for a corresponding event that is associated with the non-primary buttons.
The click event MAY be preceded by the mousedown and mouseup events on the same element, disregarding changes between other node types (e.g., text nodes). Depending upon the environment configuration, the click event MAY be dispatched if one or more of the event types mouseover, mousemove, and mouseout occur between the press and release of the pointing device button. The click event MAY also be followed by the dblclick event.
最后,这是包含上述更改的代码片段,供您查看(您实际上无法在此处测试它,since window.open
is blocked in Snippets - 但您会收到一条错误提示并且看不到任何选项卡打开;将其粘贴到您的 fiddle 中进行真正的测试):
// Allow middle button click to open client in another tab.
$(document).on('auxclick', '.clientlist-edit', function (event) {
if (event.which === 2) {
event.preventDefault();
var url = $(this).attr('href');
url = url.toLowerCase().replace('/addedit', '/clientindex');
window.open(url, '_blank');
return false;
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a class="clientlist-edit" href="/Clients/Management/AddEdit/4ffac190-72d2-476a-b0be-a9d90097272a">
<i class="glyphicon glyphicon-pencil"></i> <strong class="title">Client Name</strong>
</a>
是的 - 唯一的变化是 mousedown
-> auxclick
!享受...
关于javascript - window.open with _blank 在 Firefox 中打开两个标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57579926/
OpenAL.org && 创意开发网站已关闭。我选择替代版本 OpenAL Soft .我很担心,因为在 OpenAL Soft 的二进制安装中我找不到 alut.h header 。 alut.h
我使用 Android Studio 已经有一段时间了,但有一天应用程序突然出错了。当我尝试单击我的目录以查找要导入或打开的文件时,应用程序变得异常缓慢并且根本没有响应。当我最终成功切换到存储我的文件
自 Firefox 4 以来,这似乎是一个奇怪的功能变化。在使用 window.open() 打开一个窗口后,当用鼠标中键单击打开的窗口中的链接时(或右键单击并选择“在新窗口中打开”选项卡') 导致链
我无法从 Open::URI 的 rdoc 中得知当我这样做时返回的是什么: result = open(url) URL 返回 XML,但我如何查看/解析 XML? 最佳答案 open 返回一个 I
经常开发asp但对于细致的说法,真实不太清楚,这里简单的介绍下。 一般情况下 读取数据都是用rs.open sql,conn,1,1 修改数据:rs.open sql,conn,1,3 删除
关于 pathlib 标准库中的模块,是 path.open() 方法只是内置 open() 的“包装器”功能? 最佳答案 如果您阅读了 source code的 pathlib.Path.open你
我想将 Open Liberty 运行时的语言更改为 en_US从 Eclipse IDE 中,但我不知道如何。 也尝试使用 JVM 参数的首选项来设置它,但它没有用。 -Duser.language
这是我所拥有的: 参数“opener”未在可能的函数调用参数中列出。这是 PyCharm 错误还是其他原因? PyCharm 2018.3.5 社区版,Windows 7 上的 Python 3.6.
我正在使用 Tinkerpop 的 GraphFactory.open(Configuration 配置) Java 命令来访问 Neo4j 数据库。 一个最低限度的工作示例是: Configurat
这个问题在这里已经有了答案: What is the python "with" statement designed for? (11 个答案) 关闭 7 年前。 我没有使用过 with 语句,但
我正在玩 python 3.5 中的 open 函数。我不明白 opener 参数(最后一个参数)在 open 函数中的用法。根据 python 文档:可以通过将可调用对象作为打开器传递来使用自定义打
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 5 年前。 Improve th
我试图用 Python 来做一些模拟 3D 声音的工作。我试图运行此代码(答案中提供):Python openAL 3D sound类似,两次都收到: ModuleNotFoundError: No
我一直认为 open 和 io.open 可以互换。 显然不是,如果我相信这个片段: import ctypes, io class POINT(ctypes.Structure): _fie
这个问题在这里已经有了答案: What's the difference between io.open() and os.open() on Python? (7 个答案) 关闭 9 年前。 我是
我正在尝试更好地了解 WCF 的一些内部工作原理。我已经做了相当多的环顾四周,但我无法找到关于 ChannelFactory.Open() 与 IClientChannel.Open() 相比的明确解
这个问题在这里已经有了答案: What is the python "with" statement designed for? (11 个答案) 关闭 7 年前。 我知道有很多关于在 python
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界. 这篇CFSDN的博客文章adodb.recordset.open(rs.open)方法参数详解由
不久前我遇到了一个interesting security hole Link 看起来足够无害,但有一个漏洞,因为默认情况下,正在打开的页面允许打开的页面通过 window.opener 回调到它。有
这在我的应用程序上运行良好,但由于某种原因我无法让它在这里正常工作。无论如何,我的问题是,当我单击列表标题时,我想关闭之前打开的列表标题并仅保留事件的列表标题打开。目前它会打开我点击的所有内容,但也会
我是一名优秀的程序员,十分优秀!