Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.14.142.115] |
|
Сообщ.
#1
,
|
|
|
<textarea onKeyDown="return my_key_down(this, event);"></textarea> function my_key_down( my_textarea, my_event ) { ev = my_event || window.event; //костыль для IE, хотя и без него вроде работает /* обработка события. если ненужное сочетание клавиш, то return true, иначе идем дальше */ ev.cancelable = true; ev.cancelBubble = false; ev.returnValue = false; ev.defaultPrevented = true; if( ev.preventDefault ) ev.preventDefault(); if( ev.stopPropagation ) ev.stopPropagation(); return false; } В Firefox, Chrome горячие клавиши браузера не срабатывают, а в IE11 срабатывают. |
Сообщ.
#2
,
|
|
|
Эвентов как минимум 4, клавиши тоже по разному могут обрабатываться, но в 99% случаях достаточно return false эвента.
P.S. Я бы всё это дело переписал по-нормальному. Как-нибудь так: class TextareaObserver { constructor(node) { this.node = node; } on(event, callback) { this.node.addEventListener(event, e => callback({ original: e, code: e.keyCode, // Код кнопочки char: e.charCode, // Код буковки keyShift: e.shiftKey, // Кнопка шифт? keyAlt: e.altKey, // Альт? keyCtrl: e.ctrlKey // Контрол? }), false); return this; } onInput(callback) { return this.on('input', callback); } onKeyPress(callback) { return this.on('keypress', callback); } onKeyDown(callback) { return this.on('keydown', callback); } onKeyUp(callback) { return this.on('keyup', callback); } } // Example var textareas = document.querySelectorAll('textearea'); for (var i = 0, len = texteares.length; i < len; i++) { let observer = new TextareaObserver(textareas[i]); observer .onInput(e => console.log(e)) .onKeyPress(e => console.log(e)) .onKeyDown(e => console.log(e)) .onKeyUp(e => console.log(e)); } // Для того, чтобы заблочить дальнейшее выполнение - достаточно return false внутри коллбека обсервера. |