У меня есть текстовое поле ввода с директивой ng-model-on-blur (скопировано из Angularjs: input[text] ngChange срабатывает при изменении значения) с прикрепленным к нему обработчиком событий ng-change. Он отлично работает, так как когда пользователь печатает из коробки, он запускает функцию, прикрепленную к ng-change. Я изменил функцию ссылки, чтобы она также связывалась с событиями изменения и вставки.
link: function(scope, elm, attr, ngModelCtrl) {
if (attr.type === 'radio' || attr.type === 'checkbox') return;
if($sniffer.hasEvent('input')){
elm.unbind('input').unbind('keydown').unbind('change').unbind('paste');
}
else if($sniffer.hasEvent('change')){
elm.unbind('input').unbind('keydown').unbind('change').unbind('paste');
}
//IE8 doesn't recognize the input or change events and throws error on unbind input.
else{
elm.unbind('keydown').unbind('change').unbind('paste');
}
elm.bind('blur change paste', function() {
scope.$apply(function() {
ngModelCtrl.$setViewValue(elm.val());
});
});
}
У меня есть кнопка на этой странице, которая открывает всплывающую страницу, откуда пользователь может что-то ввести, а затем передать значение обратно в текстовое поле ввода на родительской странице. В большинстве других браузеров (Chrome, Firefox, Safari, даже IE8..) ng-change запускается, когда данные получены из всплывающего окна в текстовое поле ввода, но в IE9 и 10 ng-change не запускается, когда данные получены из всплывающего окна. Директива вызывает функцию ng-change, когда пользователь вводит данные за пределы поля, вручную вставляет данные или щелкает правой кнопкой мыши текстовое поле, но когда данные поступают из всплывающего окна, функция не запускается.
Всплывающее окно использует не AngularJS, а свойство открывателя объекта окна для передачи значения в текстовое поле ввода.
Любая помощь будет принята с благодарностью!