Keydown неправильно обновляет ng-модель во входном тексте, но keyup делает

Мне нужно получить в директиве значение ввода текста, используя ng-модель для отправки значения в базу данных. Если я использую в своей директиве событие нажатия клавиши и напишу, например, 1234 в своем вводе, результат, показанный в моей директиве, будет 123, если я написал abc, результат будет ab. Если я использую keyup, этой проблемы не существует (проверено с Firefox и Chrome). Почему это происходит?

Мой код:

.directive('updateDbb', ["$http", function ($http) {
 return {
 restrict: 'A',
 require: 'ngModel',
  link: function (scope, element, attrs, ngModel) {
        // Listen for change events to enable binding
        var ngModelValue, inputName, testValid, dbbFieldName, idDbb;
        element.bind('keydown', function () {
            ngModelValue = ngModel.$viewValue;
            console.log(ngModelValue); // Show with delay, not the case with "keyup"!!!

...


person pascal2833    schedule 22.09.2015    source источник
comment
Это именно то, что вы ожидаете. keydown — это первая часть события keypress. keydown - это когда набор символа завершен, и значение затем привязано.   -  person codemonkey    schedule 22.09.2015


Ответы (1)


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

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

keyup срабатывает, когда пользователь отпускает клавишу после того, как символ был вставлен во ввод. (если пользователь удерживает клавишу нажатой, событие будет запущено только один раз)

person Deblaton Jean-Philippe    schedule 22.09.2015