diff options
| author | Mark Dalgleish | 2013-03-21 18:07:49 +1100 |
|---|---|---|
| committer | Pete Bacon Darwin | 2013-04-17 21:20:08 +0100 |
| commit | 363e4cbf649de4c5206f1904ee76f89301ceaab0 (patch) | |
| tree | 34ae51c17ec2698732332f5a2975df282b71c85e /src | |
| parent | c4d5631f1a3d66340f82a0cd6a50d53057110c1a (diff) | |
| download | angular.js-363e4cbf649de4c5206f1904ee76f89301ceaab0.tar.bz2 | |
fix(ngModel): use paste/cut events in IE to support context menu
In IE the model is not updated when the input value is modified using the context
menu, e.g. pasting from the clipboard, or cutting all or part of the current value.
To capture these changes, we bind to the proprietary 'paste' and 'cut' events.
Closes #1462
Diffstat (limited to 'src')
| -rw-r--r-- | src/ng/directive/input.js | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/src/ng/directive/input.js b/src/ng/directive/input.js index 2574360c..db594ebe 100644 --- a/src/ng/directive/input.js +++ b/src/ng/directive/input.js @@ -413,6 +413,15 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) { } else { var timeout; + var deferListener = function() { + if (!timeout) { + timeout = $browser.defer(function() { + listener(); + timeout = null; + }); + } + }; + element.bind('keydown', function(event) { var key = event.keyCode; @@ -420,16 +429,16 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) { // command modifiers arrows if (key === 91 || (15 < key && key < 19) || (37 <= key && key <= 40)) return; - if (!timeout) { - timeout = $browser.defer(function() { - listener(); - timeout = null; - }); - } + deferListener(); }); // if user paste into input using mouse, we need "change" event to catch it element.bind('change', listener); + + // if user modifies input value using context menu in IE, we need "paste" and "cut" events to catch it + if ($sniffer.hasEvent('paste')) { + element.bind('paste cut', deferListener); + } } |
