【问题标题】:How to disable mouse middle button click on hyperlink to open in a new tab or new window?如何禁用鼠标中键单击超链接以在新选项卡或新窗口中打开?
【发布时间】:2016-09-05 06:12:02
【问题描述】:

以下代码在 Chrome/Opera 中运行良好,但在 Firefox/IE 中无法运行。请帮助我。

$('.class name of anchor tag').mousedown(function(e){
  if(e.which==2)
  {
     e.preventDefault();
     window.location = '';
  }
});        

我想禁用超链接上的鼠标中键以防止在新选项卡中打开页面。代码应该在 FF/IE 中工作。我对捕获事件没有任何问题。事件触发良好。用户点击中间按钮(即触发事件时)阻止打开链接的代码是什么。

【问题讨论】:

  • 尝试使用 === 而不是 ==。
  • 这里是您问题的答案stackoverflow.com/a/20155501/5882767
  • @LightnessRacesinOrbit OP 无法正确陈述他的问题,但我仍然认为他的问题没有得到回答。中间点击事件会触发一个 javascript 事件,并且它具有默认行为。该事件在所有浏览器中都成功调用,但即使在该事件上调用preventDefault 也不会阻止它在某些浏览器中。
  • 我不知道你将在什么具体情况下使用它,但总的来说,这似乎是非常糟糕的设计。如果它是一个链接,它应该像一个链接,包括默认的鼠标中键单击行为。如果不是,请不要使用 标签。我以前见过页面这样做,并且喜欢@SF,我真的不喜欢那样。
  • @SwR:本质上,您正在破坏浏览器的良好原生功能。通常,如果我想在转到新页面时参考上一页,我会通过中键在新选项卡中打开新页面。顺便说一句:您是否考虑了右键单击在新标签中打开?如果您这样做了,您是否考虑了处理该问题的 RightToClick 扩展程序?您是否考虑了“在链接上方用鼠标右键拖动”鼠标手势在新选项卡中打开链接,来自 MozGest 扩展?跳转到链接并按下键盘上的菜单按钮?你正在与风车进行一场艰苦的战斗。

标签: javascript html


【解决方案1】:

您可以将anchor tag 元素放在另一个元素中 - 这将充当“容器”; - 或(和)在其上放​​置另一个透明元素,并通过父/覆盖元素处理/捕获点击事件。

更新:

尽管上述技术是一种变通方法,但它可以节省时间,如果“适当的修复”不可用,它可能是唯一的选择。这种技术在点击事件处理需要更多控制的其他地方也很有用。

如果你确实应用了这种技术,使用“覆盖”你可以检测到:

如果中间按钮被点击 -> 忽略; else -> 获取 anchor 标记的 href 值并使用以下内容进行相应导航:

overlay.onclick = function(event)
{
    event = (event || window.event);

    if (event.which == 2 || event.button == 4 )
    { return; }

    window.location.href = this.parentNode.getElementsByTagName('a')[0].href;
};

【讨论】:

  • 发生这种情况是有原因的,像您建议的那样创建变通办法并不能解决或解决实际问题
  • @zerohero :: 嘿,它是 IE :P,并且没有指定版本,至少我提供了一种绝对可行的技术.. 请扭转否决票? .. 我的意思是.. 没什么好说的,或者我必须满足每个 未指定 可能是原因的问题
  • @SwR :: 谢谢,这很有用,(关于 IE 11)我相应地对您的评论投了赞成票。如果您发现我的回答至少有用,请投票? - 谢谢
  • 我想在超链接上禁用鼠标中键以防止在新选项卡中打开页面。代码应该在 FF/IE 中工作。我对捕获事件没有任何问题。事件触发良好。一旦用户单击中间按钮(即事件触发时),防止打开链接的代码是什么。
  • 仅仅因为他没有说明 IE 版本并不意味着 IE 版本 9 与 10,11 等不同。这就是 IE 的原因,他们从不修复他们的废话;)
【解决方案2】:

试试这个

$('.class name of anchor tag').on("mousedown", "selector", function (e) {

【讨论】:

    【解决方案3】:

    不要使用a-tag;改用跨度。无需破坏网络

    如果问题是:“如何防止事情按预期工作?”答案是通常“不要那样做。”

    如果不控制源,将其从a标签更改为span:https://stackoverflow.com/a/13389835/474374

    【讨论】:

      【解决方案4】:
      $(document).on("mousedown", "selector", function (ev) {
          if (ev.which == 2) {
              ev.preventDefault();
              alert("middle button");
              return false;
          }
      });
      

      【讨论】:

        【解决方案5】:

        我使用下面的代码解决了我的问题,虽然它并不令人满意,但它比以前的工作得更好。

         $('.accordion-toggle').mousedown(function(e){
            if(e.which===2) {
                if(/Firefox|MSIE |Trident/i.test(navigator.userAgent)) {
                    e.stopPropagation();
                    e.preventDefault();
                    window.location = 'index';
                    return false;
                }
                else
                {
                    e.preventDefault();
                    window.location = '';
                }
            }
        });
        

        如果有人知道,完美的解决方案,请回复。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-12-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-05
          • 1970-01-01
          • 1970-01-01
          • 2019-08-23
          相关资源
          最近更新 更多