2014-11-09 42 views
8

在jQuery或JavaScript中是否有方法使用户能够CTRL +单击链接以打开新选项卡中的链接,如<a href="">example</a>元素?jQuery/JavaScript - 允许CTRL +单击以打开新标签中的链接

这里是什么我谈论的例子: -

jQuery('#some-link').bind('click', function() { 
    window.location = 'http://someurl.com'; 
}); 

如果你按住CTRL键并单击“一些链接”元素,它使用上面的时候刚刚打开当前网页内页代码,任何想法如何做到这一点?

+0

看看.. http://stackoverflow.com/questions/4907843/open-a-url-in-a-new-tab-using-javascript – saruftw 2014-11-09 01:12:02

+0

你可能也想检查一个ctrl按键我认为 – DannyS3 2014-11-09 01:12:43

+0

有许多键可以改变默认行为。你最好使用['filter-altered-clicks'](https://github.com/bfred-it/filter-altered-clicks)来处理它。 – 2016-10-10 17:00:50

回答

12

检查Ctrl键是否被按下,并使用window.open打开链接。该链接可能无法在新标签中打开。请参阅讨论here

jQuery('#some-link').bind('click', function(e) { 
    e.preventDefault(); 
    if (e.ctrlKey){ 
    window.open('http://someurl.com','_blank') 
    } 
}); 

JSFiddle

+1

'if(e.metaKey)'可能是更好的方法,因为'e.ctrlKey'可以在Windows环境下工作而不是在Mac中,而'metaKey'可以在两个工作环境中工作 – Max 2017-02-06 15:06:36

+1

@Max绝对赞赏试图考虑每个设备,但我实际上无法让'e.metaKey'工作(至少在Windows上),检查两者似乎是正常工作。 – 2017-03-22 16:05:12

1

如果有人想在常规点击禁用页面导航,使Ajax调用或东西,但仍希望保持默认Ctrl +单击,然后右键单击和中单击(鼠标滚动按钮),即是这样的:

$('#link').bind('click', function(e) { 
 
    if (!e.ctrlKey && e.which != 2 && e.which != 3) { 
 
    e.preventDefault(); 
 
    // some logic: 
 
    $('#box').append('<br>').append($('<a>').html('not paging but doing something! Now try with CTRL')); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="box"> 
 
    <a id="link" href="http://stackoverflow.com/questions/26823884/">this question</a> 
 
</div>

的JQuery documentation说:

event.which也恢复正常按下按钮(鼠标按下和 mouseupevents),为左键报告1,2中,和3 权。使用event.which而不是event.button。

+0

这应该是被接受的答案。 – thexpand 2017-11-25 16:47:09

+0

但是,请给出一些解释 - 为什么正好有2个和3个键。 – thexpand 2017-11-25 18:25:19

相关问题