@@ -34,6 +34,8 @@ var WEEK_REGEXP = /^(\d{4,})-W(\d\d)$/;
34
34
var MONTH_REGEXP = / ^ ( \d { 4 , } ) - ( \d \d ) $ / ;
35
35
var TIME_REGEXP = / ^ ( \d \d ) : ( \d \d ) (?: : ( \d \d ) ( \. \d { 1 , 3 } ) ? ) ? $ / ;
36
36
37
+ var IE_INPUTS_WITH_CLEARING = [ 'text' , 'number' , 'date' , 'datetime-local' , 'email' , 'month' , 'time' , 'url' , 'week' ] ;
38
+
37
39
var PARTIAL_VALIDATION_EVENTS = 'keydown wheel mousedown' ;
38
40
var PARTIAL_VALIDATION_TYPES = createMap ( ) ;
39
41
forEach ( 'date,datetime-local,month,time,week' . split ( ',' ) , function ( type ) {
@@ -1126,7 +1128,11 @@ function baseInputType(scope, element, attr, ctrl, $sniffer, $browser) {
1126
1128
} ) ;
1127
1129
}
1128
1130
1129
- var timeout ;
1131
+ var timeout , oldVal ;
1132
+ var viewValueUpdated = true , msieInput = msie >= 10 && msie <= 11 ;
1133
+ if ( msieInput && attr . type in IE_INPUTS_WITH_CLEARING ) {
1134
+ oldVal = element . val ( ) ;
1135
+ }
1130
1136
1131
1137
var listener = function ( ev ) {
1132
1138
if ( timeout ) {
@@ -1152,10 +1158,18 @@ function baseInputType(scope, element, attr, ctrl, $sniffer, $browser) {
1152
1158
}
1153
1159
} ;
1154
1160
1161
+ function ieListener ( ev ) {
1162
+ var val = element . val ( ) ;
1163
+ if ( val === oldVal && ! viewValueUpdated ) return ;
1164
+ oldVal = val ;
1165
+ viewValueUpdated = false ;
1166
+ listener ( ev ) ;
1167
+ }
1168
+
1155
1169
// if the browser does support "input" event, we are fine - except on IE9 which doesn't fire the
1156
1170
// input event on backspace, delete or cut
1157
1171
if ( $sniffer . hasEvent ( 'input' ) ) {
1158
- element . on ( 'input' , listener ) ;
1172
+ element . on ( 'input' , msie ? ieListener : listener ) ;
1159
1173
} else {
1160
1174
var deferListener = function ( ev , input , origValue ) {
1161
1175
if ( ! timeout ) {
@@ -1212,6 +1226,10 @@ function baseInputType(scope, element, attr, ctrl, $sniffer, $browser) {
1212
1226
// Workaround for Firefox validation #12102.
1213
1227
var value = ctrl . $isEmpty ( ctrl . $viewValue ) ? '' : ctrl . $viewValue ;
1214
1228
if ( element . val ( ) !== value ) {
1229
+ // Workaround for IE 10 & 11 input updates #11193
1230
+ if ( msieInput ) {
1231
+ viewValueUpdated = true ;
1232
+ }
1215
1233
element . val ( value ) ;
1216
1234
}
1217
1235
} ;
0 commit comments