Обнаружение специальных нажатий клавиш в Javascript

0

У меня есть поле ввода и вы хотите настроить значение при нажатии клавиши.

'keypress .comment-input': 'onCommentInputKeyBlur',

Когда клавиша нажата, класс добавляется в элемент html для отражения изменений.

      onCommentInputKeyBlur: function(ev) {
        var $form = $('#comment-submit');
        if (ev.which) {
            $form.addClass('focused');
        } else if (!$(ev.currentTarget).val()) {
            $form.removeClass('focused');
        }
    },

Тем не менее, это не определяет нажатия специальных клавиш (т.е. Когда пользователь нажимает ctrl + v для пасты, он не обнаруживается, и поэтому неправильное форматирование).

Использование наподобие keyup и keydown разрешает проблему, но форматирование неверно в течение короткой секунды:

Keydown → значение не должно изменяться до тех пор, пока фактическое значение не будет введено нажатием клавиши, но оно изменится вправо, когда ctrl ударит, а не ждет второго ключа

Keyup → новое значение кратковременно вставляется поверх предыдущего, ожидая, что клавиша действительно будет выпущена.

Есть ли лучший способ решить это? В идеале я хотел бы определить, действительно ли введенный ключ действительно производит значение и не является просто специальным ключом.

  • 0
    событие keypress запускается при каждом нажатии клавиши. Вы спрашиваете, как определить, нажал ли пользователь действительную клавишу?
  • 0
    Событие нажатия клавиши не регистрируется при нажатии клавиши управления (или аналогичной специальной клавиши). однако keyup и keydown распознают его.
Показать ещё 2 комментария
Теги:

2 ответа

0

Какова конечная цель этой функциональности? возможно, есть лучший подход.

Если вы настаиваете на этом, используя событие нажатия клавиши, вы можете просто проверить event.keyCode и отфильтровать несколько кодов клавиш, которые ничего не меняют, например shift, control, alt.

0

Посмотрите на событие onchange. Он довольно хорошо поддерживается и может решить вашу проблему.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню