Ответ 1
В вашей функции click, e.metaKey оценивает значение true? Если да, то вы здесь.
У меня есть варианты моего веб-приложения на вкладках.
<ul id="tabs">
<li><a href="a.php">aaa</a></li>
<li><a href="b.php">bbb</a></li>
<li><a href="c.php">ccc</a></li>
<li><a href="d.php">ddd</a></li>
<li><a href="e.php">eee</a></li>
</ul>
Когда пользователь нажимает на любую вкладку (в том же окне), появляется эффект fadeout, который я получаю с этим кодом, а затем автоматическое перенаправление:
$('ul#tabs li a').click(function(e){
if(e.which == 1) {
var link = $(this).attr('href');
$('#content').fadeOut('fast',function(){
window.location = link;
});
}
});
Он отлично работает, потому что он игнорирует средний щелчок мыши (при открытии опции на новой вкладке эффект не должен запускаться). Проблема в том, что если я открываю вкладку с комбинацией клавиатуры + мышь, вместо открытия новой вкладки, она запускает весь код эффекта/перенаправления.
Итак, как я могу обнаружить это с помощью jQuery:
В вашей функции click, e.metaKey оценивает значение true? Если да, то вы здесь.
К сожалению, event.metaKey
не оценивает true в Windows, когда ключ Ctrl удерживается нажатой.
К счастью, event.ctrlKey
действительно оценивает значение true в этих ситуациях. Кроме того, вы можете рассмотреть shift + клики в обработчике событий.
Таким образом, ваш javascript-код вашей кросс-платформенной jquery будет выглядеть примерно так:
$('ul#tabs li a').on('click', function(e) {
var link = $(this).attr('href');
// Check "open in new window/tab" key modifiers
if (e.shiftKey || e.ctrlKey || e.metaKey) {
window.open(link, '_blank');
} else {
$('#content').fadeOut('fast',function(){
window.location = link;
});
}
}
});
Использование e.metaKey не работает одинаково в окнах, поэтому для обнаружения в Windows вы можете использовать объект навигатора и посмотреть, нажимает ли пользователь ключ ctrl (по умолчанию открывается новая вкладка).
$('ul#tabs li a').click(function(a){
var href = $(this).attr('href');
// check if user clicked with command key (for mac) or ctrl key (for windows)
if(a.metaKey || (navigator.platform.toUpperCase().indexOf('WIN')!==-1 && a.ctrlKey)) {
window.open(href,'_blank');
} else {
$('#content').fadeOut('fast', function(){
window.location = href;
});
}
});
Я знаю, что вы хотите использовать jQuery, но я бы попросил Keymaster:
https://github.com/madrobby/keymaster
Это действительно здорово, я использую его для проекта, над которым я работаю, и это здорово.