我有一个带有 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,而是使用 window 对象的 opener 属性将值传输到输入文本框。
任何帮助将不胜感激!