diff options
| -rw-r--r-- | src/widget/input.js | 28 | ||||
| -rw-r--r-- | test/widget/inputSpec.js | 2 |
2 files changed, 19 insertions, 11 deletions
diff --git a/src/widget/input.js b/src/widget/input.js index 5268f1a7..ca5ecc2b 100644 --- a/src/widget/input.js +++ b/src/widget/input.js @@ -1038,14 +1038,8 @@ var ngModelInstantDirective = ['$browser', function($browser) { return { require: 'ngModel', link: function(scope, element, attr, ctrl) { - element.bind('keydown change input', function(event) { - var key = event.keyCode; - - // command modifiers arrows - if (key === 91 || (15 < key && key < 19) || (37 <= key && key <= 40)) return; - - $browser.defer(function() { - var touched = ctrl.touch(), + var handler = function() { + var touched = ctrl.touch(), value = trim(element.val()); if (ctrl.viewValue !== value) { @@ -1055,8 +1049,24 @@ var ngModelInstantDirective = ['$browser', function($browser) { } else if (touched) { scope.$apply(); } - }); + }; + + var timeout; + element.bind('keydown', function(event) { + var key = event.keyCode; + + // command modifiers arrows + if (key === 91 || (15 < key && key < 19) || (37 <= key && key <= 40)) return; + + if (!timeout) { + timeout = $browser.defer(function() { + handler(); + timeout = null; + }); + } }); + + element.bind('change input', handler); } }; }]; diff --git a/test/widget/inputSpec.js b/test/widget/inputSpec.js index e4df4fa5..69baba06 100644 --- a/test/widget/inputSpec.js +++ b/test/widget/inputSpec.js @@ -949,14 +949,12 @@ describe('input', function() { inputElm.val('value2'); browserTrigger(inputElm, 'change'); - $browser.defer.flush(); expect(scope.value).toBe('value2'); if (msie < 9) return; inputElm.val('value3'); browserTrigger(inputElm, 'input'); - $browser.defer.flush(); expect(scope.value).toBe('value3'); })); }); |
