События клавиатуры JQuery - PullRequest
       1

События клавиатуры JQuery

5 голосов
/ 02 апреля 2011

Используя jQuery, я хотел бы захватить событие клавиатуры, которое:

  • до пользователь отрывает палец от клавиши
  • после символы из события клавиатуры были зарегистрированы в поле ввода.

Для пояснения посмотрите этот пример .Когда срабатывает keypress, значение input еще не обновляется.

[Редактировать]

Видимо, я не понимал, что мне нужно.

Функция должна вызываться до , когда пользователь поднимает палец вверх от клавиши, но после символа клавиши помещается в поле ввода.Таким образом, следующее не работает:

  • нажатие клавиши: при событии keypress значение в текстовом поле не было обновлено
  • нажатие клавиши: при событии keypress,значение в текстовом поле не было обновлено
  • keyup: вызывается, когда пользователь поднимает палец, что слишком поздно.

Ответы [ 4 ]

13 голосов
/ 02 апреля 2011

Вы можете использовать событие input, которое работает в последних версиях всех основных браузеров:

var input = document.getElementById("your_input_id");
input.oninput = function() {
    alert(input.value);
};

К сожалению, он не работает в IE <= 8. Однако в этих браузерах вместо свойства <code>value можно использовать событие propertychange:

input.onpropertychange = function() {
    if (window.event.propertyName == "value") {
        alert(input.value);
    }
};

ТАК постоянный ответчик JavaScript @ Andy E подробно рассказал об этом в своем блоге: https://web.archive.org/web/20140626060232/http://whattheheadsaid.com/2011/10/update-html5-oninput-event-plugin-for-jquery

3 голосов
/ 02 апреля 2011

Использование события keyup , пример для jsFiddle

$("textarea").keyup(function(e){
   alert($(this).val());
});

Это происходит после того, как вы поднимете ключ. Я не знаю, чего вы хотите достичь, но вы можете сохранить состояние, прежде чем поднимать ключ (на keydown или keypress) и восстанавливать позже, если это необходимо. Вы также можете остановить вывод в событии keyup, используя e.preventDefault(), поэтому даже после нажатия клавиши он не будет регистрировать значения в области.

3 голосов
/ 02 апреля 2011

Вы можете прослушать событие keydown и сохранить значение в переменной. Эта переменная будет иметь значение, которое было до нового ввода, и новый ввод будет включен в событие keyup

UPDATE:

Хорошо, я неправильно понял ваши требования, но нет события, которое бы отвечало вашим потребностям. Единственное, что я могу придумать, чтобы смоделировать это поведение, это:

  • прослушать keydown/keypress
  • получить значение из объекта event (получить event.which, затем преобразовать его в фактическое значение)
  • используйте переменную, как я упоминал в первоначальном совете, и объедините новые входные данные к ней

Вот скрипка: http://jsfiddle.net/HpXuU/13/

Это, очевидно, не идеальное решение, поскольку для правильной работы требуется некоторая (может показаться ненужная) работа. Я бы посоветовал переосмыслить ваши потребности, но если это поведение абсолютно то, что вам нужно, я думаю, что это шаг в правильном направлении.

1 голос
/ 02 апреля 2011

Вы можете использовать setTimeout:

$('input').keypress(function() {
    var that = this;
    setTimeout(function() {
        // read that.value
    }, 0);
});

Демо: http://jsfiddle.net/HpXuU/8/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...