【发布时间】:2017-04-25 05:50:17
【问题描述】:
问题
我想触发(中间)鼠标单击链接,以触发此事件的本机浏览器行为。
例如在我使用的那些浏览器中,中键单击将导致链接页面在后台的新选项卡中打开。
但如果其他浏览器有不同的行为,则应改为触发。
我知道有element.click(); 方法,但我如何告诉它应该点击哪个鼠标按钮?
背景
背景是我想让 div 的行为尽可能像常规链接一样。我的想法是我会创建一个隐藏的链接标签并触发本机浏览器行为。
div-as-a-link 的要求:
- href 可以来自 data-href 属性。
- 左键单击、中键单击和可能的右键单击的本机浏览器行为。
- 尊重目标属性,这可能来自数据目标属性。
- 标签索引
- 用键盘激活?
- 可以在 div 中选择文本 sn-ps。这意味着我们不能只使用叠加层。
为什么不使用原生链接标签?因为 div 包含内部 <a> 标签。因此,将 div 框设置为 a-tag 会导致嵌套 a-tags,这会导致某些浏览器重构 DOM 树。
显然我可以在点击时设置 document.location.href。但这只是浏览器原生行为的 20%。
我也可以尝试检测鼠标按键,如果是中键的话,用js在后台打开标签。
但也许有些浏览器对中键点击有不同的行为。我宁愿让浏览器做它的事情,也不愿尝试用 js 复制特定的浏览器行为。
我的想法是创建一个具有相同href 的隐藏<a> 标签,并将来自<div> 的点击事件委托给这个隐藏的<a> 标签。为此,我需要使用相同的鼠标按钮触发事件。我不知道该怎么做。
js 还是 jQuery?
jQuery 适用于我的个人用例。但是为了让更广泛的受众有用,如果你知道的话,也许也可以发布如何在没有 jQuery 的情况下做到这一点。
另见
有一些问题处理这类问题,但每个问题的角度不同或有不同的约束。
【问题讨论】:
-
从另一个 SO 尝试这个解决方案:stackoverflow.com/a/32868971
-
@JonUleis 太棒了!我可以简单地将现有的点击事件从 div 发送到 dispatchEvent(),还是需要创建一个新的事件对象?
-
@SpencerDoak 这告诉我如何检测鼠标按钮,但不告诉我如何触发这样的事件。但无论如何这也很有用。
-
@SpencerDoak 您的链接用于检测点击,而不是像 OP 要求的那样触发它们。 @donquixote 您必须进行试验才能看到 - 可能需要一些技巧(请注意,例如,他们正在 jQ 选择器的
[0]索引上执行事件)。
标签: javascript jquery hyperlink click