На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ElcnU, ANDLL, fatalist
  
> Как перехватить горячие клавиши в IE , preventDefault не работает
    ExpandedWrap disabled
      <textarea onKeyDown="return my_key_down(this, event);"></textarea>

    ExpandedWrap disabled
      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 срабатывают.
    Сообщение отредактировано: S.Eugene -
      Эвентов как минимум 4, клавиши тоже по разному могут обрабатываться, но в 99% случаях достаточно return false эвента.

      P.S. Я бы всё это дело переписал по-нормальному. Как-нибудь так:

      ExpandedWrap disabled
        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 внутри коллбека обсервера.
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0168 ]   [ 15 queries used ]   [ Generated: 20.04.24, 01:05 GMT ]