Keydown не опреснява правилно ng-model във въведен текст, но keyup го прави

Трябва да извлека в директива стойността на въвеждане на текст, използвайки ng-model, за да изпратя стойност към база данни. Ако използвам в моята директива събитието keydown и напиша например 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