Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何禁用鼠标中键单击超链接以在新选项卡或新窗口中打开?_Javascript_Html - Fatal编程技术网

Javascript 如何禁用鼠标中键单击超链接以在新选项卡或新窗口中打开?

Javascript 如何禁用鼠标中键单击超链接以在新选项卡或新窗口中打开?,javascript,html,Javascript,Html,以下代码在Chrome/Opera中运行良好,但在Firefox/IE中不起作用。请帮助我 $('.class name of anchor tag').mousedown(function(e){ if(e.which==2) { e.preventDefault(); window.location = ''; } }); 我想在超链接上禁用鼠标中键,以防止在新选项卡中打开页面。代码应在FF/IE中工作。我在捕获事件方面没有任何问题。事件触发

以下代码在Chrome/Opera中运行良好,但在Firefox/IE中不起作用。请帮助我

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

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

试试这个

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

您可以将
锚定标记
元素放置在另一个元素中,该元素将充当“容器”-或者(和)在其上放置另一个透明元素,并通过父/覆盖元素处理/捕获单击事件

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

如果应用此技术,使用“覆盖”可以检测:

如果单击了中间按钮->忽略;else->获取锚定标记的
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;
};

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

 $('.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 = '';
        }
    }
});

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

不要使用a标签;改用跨距。没有必要破坏网络

如果问题是:“我如何防止事情按预期进行?”答案通常是“不要这样做。”


如果您无法控制源代码,请将其从a标记更改为span:

尝试使用===intead of==。以下是您的问题@LightnessRacesinOrbit的答案OP无法正确陈述他的问题,但我仍然认为他的问题没有得到回答。鼠标中键单击事件触发一个javascript事件,并具有默认行为。该事件在所有浏览器中都被成功调用,但即使在事件上调用
preventDefault
,在某些浏览器中也无法阻止它。我不知道您将在什么具体情况下使用它,但总体而言,这似乎是一个非常糟糕的设计。如果它是一个链接,它应该像一个链接一样,包括默认的鼠标中键单击行为。如果不是,不要使用标签。我以前见过页面这样做,像@SF,我真的不喜欢那样。@SwR:本质上,你破坏了浏览器良好的本机功能。通常,如果我想在转到新页面时引用上一页,我会通过中键单击在新选项卡中打开新页面。顺便说一句:你在“新”选项卡中右键单击打开帐户了吗?如果您这样做了,您是否解释了处理该问题的RightToClick扩展?您是否考虑过“用鼠标右键在链接上方拖动”鼠标手势在MozGest扩展中的新选项卡中打开链接?点击链接并按下键盘上的菜单按钮?你正在与风车展开一场艰苦的战斗。这是有原因的,而像你建议的那样创造一个变通办法并不能解决或解决实际问题issue@zerohero::嘿,这是IE:P,并且版本没有指定,至少我提供了一种技术,它肯定会起作用。。请取消否决票。。我是说。。没什么好说的,要么我就得应付每一个可能成为问题的未指明的问题cause@SwR::谢谢,这很有用,(关于IE 11),我也相应地对你的评论投了赞成票。如果你觉得我的答案至少有用,请投赞成票谢谢,我想在超链接上禁用鼠标中键,以防止在新选项卡中打开页面。代码应该在FF/IE中工作。我在捕获事件方面没有任何问题。事件触发得很好。当用户点击中间按钮(即事件触发时)时,有什么代码可以防止打开链接。仅仅因为他没有说明ie版本并不意味着9版的ie与10、11等版本的ie不同。这就是ie的原因,他们从不修复他们的垃圾;)
 $('.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 = '';
        }
    }
});