Skip to content
This repository was archived by the owner on Sep 8, 2020. It is now read-only.

Commit d84a811

Browse files
Fix #168
add a try/catch around the new event constructor for browsers that don't support it fix some indentation issues
1 parent 5970499 commit d84a811

File tree

1 file changed

+39
-31
lines changed

1 file changed

+39
-31
lines changed

src/mask.js

+39-31
Original file line numberDiff line numberDiff line change
@@ -460,7 +460,7 @@ angular.module('ui.mask', [])
460460
// Angular uses html element and calls setViewValue(element.value.trim()), setting it to the trimmed mask
461461
// when it should be empty
462462
var currentVal = iElement.val();
463-
var isTemporarilyEmpty = value === '' && currentVal && angular.isDefined(iAttrs.uiMaskPlaceholderChar) && iAttrs.uiMaskPlaceholderChar === 'space';
463+
var isTemporarilyEmpty = value === '' && currentVal && angular.isDefined(iAttrs.uiMaskPlaceholderChar) && iAttrs.uiMaskPlaceholderChar === 'space';
464464
if(isTemporarilyEmpty) {
465465
iElement.val('');
466466
}
@@ -476,12 +476,20 @@ angular.module('ui.mask', [])
476476
var change;
477477
if (angular.isFunction(window.Event) && !element.fireEvent) {
478478
// modern browsers and Edge
479-
change = new Event('change', {
480-
view: window,
481-
bubbles: true,
482-
cancelable: false
483-
});
484-
element.dispatchEvent(change);
479+
try {
480+
change = new Event('change', {
481+
view: window,
482+
bubbles: true,
483+
cancelable: false
484+
});
485+
} catch (ex) {
486+
//this is for certain mobile browsers that have the Event object
487+
//but don't support the Event constructor #168
488+
change = document.createEvent('HTMLEvents');
489+
change.initEvent('change', false, true);
490+
} finally {
491+
element.dispatchEvent(change);
492+
}
485493
} else if ('createEvent' in document) {
486494
// older browsers
487495
change = document.createEvent('HTMLEvents');
@@ -511,30 +519,30 @@ angular.module('ui.mask', [])
511519
}
512520

513521
function keydownHandler(e) {
514-
/*jshint validthis: true */
515-
var isKeyBackspace = e.which === 8,
516-
caretPos = getCaretPosition(this) - 1 || 0, //value in keydown is pre change so bump caret position back to simulate post change
517-
isCtrlZ = e.which === 90 && e.ctrlKey; //ctrl+z pressed
518-
519-
if (isKeyBackspace) {
520-
while(caretPos >= 0) {
521-
if (isValidCaretPosition(caretPos)) {
522-
//re-adjust the caret position.
523-
//Increment to account for the initial decrement to simulate post change caret position
524-
setCaretPosition(this, caretPos + 1);
525-
break;
526-
}
527-
caretPos--;
528-
}
529-
preventBackspace = caretPos === -1;
530-
}
531-
532-
if (isCtrlZ) {
533-
// prevent IE bug - value should be returned to initial state
534-
iElement.val('');
535-
e.preventDefault();
536-
}
537-
}
522+
/*jshint validthis: true */
523+
var isKeyBackspace = e.which === 8,
524+
caretPos = getCaretPosition(this) - 1 || 0, //value in keydown is pre change so bump caret position back to simulate post change
525+
isCtrlZ = e.which === 90 && e.ctrlKey; //ctrl+z pressed
526+
527+
if (isKeyBackspace) {
528+
while(caretPos >= 0) {
529+
if (isValidCaretPosition(caretPos)) {
530+
//re-adjust the caret position.
531+
//Increment to account for the initial decrement to simulate post change caret position
532+
setCaretPosition(this, caretPos + 1);
533+
break;
534+
}
535+
caretPos--;
536+
}
537+
preventBackspace = caretPos === -1;
538+
}
539+
540+
if (isCtrlZ) {
541+
// prevent IE bug - value should be returned to initial state
542+
iElement.val('');
543+
e.preventDefault();
544+
}
545+
}
538546

539547
function eventHandler(e) {
540548
/*jshint validthis: true */

0 commit comments

Comments
 (0)