Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Горячие клавиши


Автор: Innuendo 15.2.2006, 21:04
Видел тему в FAQ, но там чё-то ответа не нашел.
У меня отловка событий, для тегов быстрой формы ответа. Ставить Ctrl+Alt не удобно (слишком длинно), ALT- если браузер на английском, то он будет менюшки сверху открывать, и CTRL - етсь зарезервированные горячие клавиши.
Как блокировать стандартные события CTRL(печать, ъистори, журнал и т.д... ну вот как на этом форуме к примеру)
Вот как выглядят мои кнопки:
Код

document.onkeydown=function(e){
if (e) event=e
if ((event.keyCode==13)&&(event.ctrlKey)){
      document.REPLIER.submit.click();
}
if ((event.keyCode==66)&&(event.ctrlKey)){
      eval("copyT('B');insTxt()");
}

if ((event.keyCode==85)&&(event.ctrlKey)){
      eval("copyT('U');insTxt()");
}

if ((event.keyCode==73)&&(event.ctrlKey)){
      eval("copyT('I');insTxt()");
}

if ((event.keyCode==81)&&(event.ctrlKey)){
      eval("copyT('QUOTE');insTxt()");
}

if ((event.keyCode==80)&&(event.ctrlKey)){
      eval("copyT('IMG');insTxt()");
}
if ((event.keyCode==76)&&(event.ctrlKey)){
      eval("copyT('URL');insTxt()");
}
if ((event.keyCode==67)&&(event.ctrlKey)){
      eval("copyT('CODE');insTxt()");
}
if ((event.keyCode==72)&&(event.ctrlKey)){
      eval("copyT('HTML');insTxt()");
}
if ((event.keyCode==82)&&(event.ctrlKey)){
      eval("copyTC('RED');insTxt()");
}
}

Автор: 12345c 15.2.2006, 21:20
Выполнять event.returnValue=false; (для всех бр.)

Автор: Innuendo 15.2.2006, 21:35
а где это вставить?

Автор: 12345c 15.2.2006, 22:40
В document.onkeydown=function(e){} , в любом месте

Автор: Innuendo 15.2.2006, 22:59
не помогло smile

Автор: 12345c 15.2.2006, 23:07
Но Ctrl-F у меня точно помню, что блокировало (ie). Остальные, может, не все имеют такое свойство? Также блокировались всякого рода прокрутки и хождения по истории страниц (Alt - <== , BaackSpace)

Автор: Innuendo 15.2.2006, 23:12
я пробовал в Мозилле. Ctrl+b, Ctrl+H, ctrl+U не блокировало.. остальное не пробовал smile

Автор: Innuendo 16.2.2006, 23:29
smile никто не знает?

Автор: Sardar 19.2.2006, 03:05
Innuendo, читаем доку млин smile
Для оперы 6+ или не IE ловим document.onkeypress. Для ИЕ ловим document.onkeydown.

В конце обработчика события такая магия:
Код
evt.cancelBubble = true; //что бы на window не убежало, некоторые там слушают
if(evt.stopPropagation) evt.stopPropagation(); //отрубаем bubble в W3C браузерах
evt.returnValue = false; //отрубаем дефолтовое действие в IE
if(evt.preventDefault) evt.preventDefault(); //отрубаем дефол. дей. в W3C браузерах
return false; //традиционный способ отрубить деф. действие


Для нового дизайна писал код для работы с "горячими клавиашами", советую пользовать, удобно smile
http://forum.vingrad.ru/index.php?showtopic=84449

Автор: 12345c 19.2.2006, 10:16
О, ценное замечание, а то пробовал, а preventDefault() как раз не хватало.
Но заметил такую вещь в оболочке GreenBrowser (2.4 0323) - в нём не перехватываются клавиши типа Ctrl-N, Ctrl-F этим кодом:
(в IE6, FF всёнормально)

Код
<textarea rows=20 onkeypress=ff(event,this) onkeydown=ff(event,this)></textarea>

<script>d=document;
ff=function(e,t){
    //if(!e)e=event;
    t.value+=e.type+' ';
e.cancelBubble = true; //что бы на window не убежало, некоторые там слушают
if(e.stopPropagation) e.stopPropagation(); //отрубаем bubble в W3C браузерах
e.returnValue = false; //отрубаем дефолтовое действие в IE
if(e.preventDefault) e.preventDefault(); //отрубаем дефол. дей. в W3C браузерах
//return false; //традиционный способ отрубить деф. действие
}
</script>
У него есть и другие особенности - несрабатывание onbeforeunload, так что это может быть непринципиально и отнесено к недостаткам разработчиков, а не браузера : ).

Автор: Loengreen 21.12.2007, 16:03
А можно ли перехватить ctrl + v для IE? В ff все ок.

Автор: Avb 8.1.2008, 16:47
Loengreen, думаю ответ Вы сможете найти в этом топике http://forum.vingrad.ru/forum/topic-175929.html

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)