Комбинация ctrl+влево или вправо не работают корректно в Опере
День добрый!
Озадачился тут проблемой навигацией по нажатию клавиш. Проблема такая, по нажатию ctrl + клавиша влево или вправо, выполняется переход по галерее картинок назад или вперёд соответственно. Код: var KeyBoardNav = function(e){ if (e.ctrlKey){ if( e.which == 37 ) { var url = jQuery("#photo_links div.item:eq(0) a:lt(1) ").attr("href"); var id = url.match(/\/photos\/(\d+)\/.*/); if( id ){ url = "http://photosightlocal" + url; window.location = url; } alert(url); }else if (e.which == 39 ){ var url = jQuery("#photo_links div.item:eq(1) a:lt(1)").attr("href"); var id = url.match(/\/photos\/(\d+)\/.*/); if( id ){ url = "http://photosightlocal" + url; window.location = url; } alert(url); } } } document.onkeydown = KeyBoardNav; всё это потом кладётся в jQuery(document).ready. Firefox, chrome работает на ура. В опере проблемы. Если я закоменчиваю alert(url); то Опера начинает воспринимать это сочетание клавиш как свои, т.е. она включает свою навигацию по истории. Куда копать? |
В Opera нужно нажимать Ctrl + Shift + →
|
Спасибо, но это не решение моей проблемы.
|
onkeydown > onkeypress ?
|
Гхмм… Мне лично и e.preventDefault() хватило.
|
Цитата:
Вообще, я наверно не правильно вопрос поставил. Главный вопрос, это можно ли заставить оперу, не использовать свои горячие клавиши, т.е. чтобы она выполнила js и всё. Алерты видимо как раз останаливают её выполнять действие горячих клавиш, но понятно что это не вариант. Нажатие дополнительно к нужной комбинации shift'а, как посоветовал товарищ Octane, видимо выполняет похожую функцию, т.е останавливает оперу от выполнения горячих клавиш, но это снова не вариант, не будем же мы под каждый браузер свои комбинации делать.. |
То есть пользователи Opera привыкли нажимать горячие клавиши на сайтах через Shift, а вы им: "Ну уж нет, сделаем по моему, чтобы было везде одинаково". Там любой accesskey так работает, или, например, перемещение по ссылкам выполняется при помощи Shift+стрелки.
Цитата:
Ох уж эта Opera… |
Странно. Опера стабильная, 10.10 под виндами; обработчик вешаю на document, по событию keypress. Убиваются все действия по-умолчанию, включая рефреш через f5.
|
Цитата:
|
document.addEventListener("keypress", function(e){ if (!e.ctrlKey || e.keyCode > 40 || e.keyCode < 37) return; switch (e.keyCode){ case 37: window.status = "Ctrl ←"; break; case 38: window.status = "Ctrl ↑"; break; case 39: window.status = "Ctrl →"; break; case 40: window.status = "Ctrl ↓"; break; } e.preventDefault(); }, false); Works fine for me. |
Часовой пояс GMT +3, время: 15:27. |