@@ -77,13 +77,13 @@ angular.module('ui.mask', [])
77
77
preventBackspace ;
78
78
79
79
var originalIsEmpty = controller . $isEmpty ;
80
- controller . $isEmpty = function ( value ) {
81
- if ( maskProcessed ) {
82
- return originalIsEmpty ( unmaskValue ( value || '' ) ) ;
83
- } else {
84
- return originalIsEmpty ( value ) ;
85
- }
86
- } ;
80
+ controller . $isEmpty = function ( value ) {
81
+ if ( maskProcessed ) {
82
+ return originalIsEmpty ( unmaskValue ( value || '' ) ) ;
83
+ } else {
84
+ return originalIsEmpty ( value ) ;
85
+ }
86
+ } ;
87
87
88
88
function initialize ( maskAttr ) {
89
89
if ( ! angular . isDefined ( maskAttr ) ) {
@@ -453,8 +453,21 @@ angular.module('ui.mask', [])
453
453
}
454
454
}
455
455
//Check for different value and trigger change.
456
+ //Check for different value and trigger change.
456
457
if ( value !== prevValue ) {
458
+ // #157 Fix the bug from the trigger when backspacing exactly on the first letter (emptying the field)
459
+ // and then blurring out.
460
+ // Angular uses html element and calls setViewValue(element.value.trim()), setting it to the trimmed mask
461
+ // when it should be empty
462
+ var currentVal = iElement . val ( ) ;
463
+ var isTemporarilyEmpty = value === '' && currentVal && angular . isDefined ( iAttrs . uiMaskPlaceholderChar ) && iAttrs . uiMaskPlaceholderChar === 'space' ;
464
+ if ( isTemporarilyEmpty ) {
465
+ iElement . val ( '' ) ;
466
+ }
457
467
triggerChangeEvent ( iElement [ 0 ] ) ;
468
+ if ( isTemporarilyEmpty ) {
469
+ iElement . val ( currentVal ) ;
470
+ }
458
471
}
459
472
prevValue = value ;
460
473
}
@@ -593,7 +606,7 @@ angular.module('ui.mask', [])
593
606
594
607
// If value has not changed, don't want to call $setViewValue, may be caused by IE raising input event due to placeholder
595
608
if ( valUnmasked !== valUnmaskedOld )
596
- valAltered = true ;
609
+ valAltered = true ;
597
610
}
598
611
599
612
// Update values
0 commit comments