Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Комбинация ctrl+влево или вправо не работают корректно в Опере (https://javascript.ru/forum/events/7938-kombinaciya-ctrl-vlevo-ili-vpravo-ne-rabotayut-korrektno-v-opere.html)

Voblasoul 27.02.2010 16:17

Комбинация 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); то Опера начинает воспринимать это сочетание клавиш как свои, т.е. она включает свою навигацию по истории. Куда копать?

Octane 27.02.2010 16:25

В Opera нужно нажимать Ctrl + Shift + →

Voblasoul 27.02.2010 16:28

Спасибо, но это не решение моей проблемы.

Riim 27.02.2010 20:03

onkeydown > onkeypress ?

subzey 28.02.2010 15:49

Гхмм… Мне лично и e.preventDefault() хватило.

Voblasoul 01.03.2010 08:33

Цитата:

Сообщение от subzey (Сообщение 46327)
Гхмм… Мне лично и e.preventDefault() хватило.

Не помогает.

Вообще, я наверно не правильно вопрос поставил. Главный вопрос, это можно ли заставить оперу, не использовать свои горячие клавиши, т.е. чтобы она выполнила js и всё. Алерты видимо как раз останаливают её выполнять действие горячих клавиш, но понятно что это не вариант. Нажатие дополнительно к нужной комбинации shift'а, как посоветовал товарищ Octane, видимо выполняет похожую функцию, т.е останавливает оперу от выполнения горячих клавиш, но это снова не вариант, не будем же мы под каждый браузер свои комбинации делать..

Octane 01.03.2010 08:41

То есть пользователи Opera привыкли нажимать горячие клавиши на сайтах через Shift, а вы им: "Ну уж нет, сделаем по моему, чтобы было везде одинаково". Там любой accesskey так работает, или, например, перемещение по ссылкам выполняется при помощи Shift+стрелки.
Цитата:

Сообщение от Voblasoul
не будем же мы под каждый браузер свои комбинации делать..

Всего лишь надо добавить в подсказку "Shift+", никаких других изменений не требуется.

Ох уж эта Opera…

subzey 01.03.2010 09:07

Странно. Опера стабильная, 10.10 под виндами; обработчик вешаю на document, по событию keypress. Убиваются все действия по-умолчанию, включая рефреш через f5.

Voblasoul 01.03.2010 09:41

Цитата:

Сообщение от subzey (Сообщение 46421)
Странно. Опера стабильная, 10.10 под виндами; обработчик вешаю на document, по событию keypress. Убиваются все действия по-умолчанию, включая рефреш через f5.

Сочетание ctrl+стрелки тоже убиваются?

subzey 01.03.2010 11:46

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, время: 18:46.