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 17: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 17:25

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

Voblasoul 27.02.2010 17:28

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

Riim 27.02.2010 21:03

onkeydown > onkeypress ?

subzey 28.02.2010 16:49

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

Voblasoul 01.03.2010 09:33

Цитата:

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

Не помогает.

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

Octane 01.03.2010 09:41

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

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

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

Ох уж эта Opera…

subzey 01.03.2010 10:07

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

Voblasoul 01.03.2010 10:41

Цитата:

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

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

subzey 01.03.2010 12: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.

Voblasoul 01.03.2010 14:44

Спасибо большое!
Корень зла был в том, что preventDefault() не работал у меня если я задавал onkeydown, с onkeypress он сработал, и опера перестала свои действия выполнять.
Ещё раз спасибо.

subzey 01.03.2010 15:29

А я уж думал удивляться. :)


Часовой пояс GMT +3, время: 20:10.