在IE9和ie10中,angularjs的ng-change不会触发ng-model-onblur指令
angularjs ng-change doesn't get fired on ng-model-onblur directive in IE9 and 10
我有一个带有ng-model-on-blur指令的输入文本框(从Angularjs: input[text] ngChange在值改变时触发),并附加了一个ng-change事件处理程序。它工作得很好,因为当用户键入开箱即用时,它会触发附加到ng-change的函数。我修改了link函数,这样它也可以绑定更改和粘贴事件。
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和ie10中,当从弹出框接收到数据时,ng-change不会被触发。当用户键入字段,手动粘贴数据或通过右键单击文本框时,该指令调用ng-change函数,但当数据来自弹出窗口时,它不会触发该函数。
该弹出窗口不使用AngularJS,而是使用window对象的opener属性将值传递给输入文本框。
任何帮助都将非常感激!
我能够解决这个问题,因为更改事件是从父页面元素的弹出页面触发的。设置opener. parentelelement .value = newValue后的弹出页面;正在执行parentelelement . fireevent ('change')。createEventObject为true,否则将对非ie浏览器执行parentelelement . dispatchevent()。
MS在IE9中引入了DOM Level 2事件,因此IE>=9浏览器不支持fireEvent。因为文档。对于IE>=9, createEventObject仍然为真,它正在执行fireEvent,因此在我的指令elm.bind('change')中没有被触发。我将弹出式javascript文件更改为:
if(element.dispatchEvent) {
//IE >= 9 and other browsers event code
var evt = document.createEvent("HTMLEvents");
evt.initEvent(event, true, true );
return element.dispatchEvent(evt);
}
else if(element.fireEvent){
//IE < 9
var evt = document.createEventObject();
return element.fireEvent('on'+event,evt);
}
和ng-change也开始触发IE>= 9。为什么。fireevent()不能在IE9中工作?帮助我理解问题并解决它。
再次感谢这个很棒的社区!
- 在指令中使用 ng-model 和 ng-repeat
- AngularJS - 指令填充文本框,但ng-model没有值
- 将 md-dialog 中的值绑定到指令中的 ng-model
- AngularJS - 不能使用指令在ng-model中引用$index
- AngularJS - 在带有重复和动态 html 控件的指令中使用 ng-model
- AngularJs 指令在更改时获取单选按钮 ng-model 值
- Angular$scope$注意仅从表单(ng-model指令)更改的变量
- 在Angularjs中,嵌套在指令中的控制器可以设置指令的ng-model
- 使用ng-model, bindToController在一个页面上显示多个指令
- angularjs指令中的Ng-model
- Ng-repeat使用键和值,然后使用键作为ng-model的指令值
- 在IE9和ie10中,angularjs的ng-change不会触发ng-model-onblur指令
- 创建一个使用ng-model并具有唯一作用域的指令
- 如何创建一个使用ng-model的angular数据提取器指令
- Angularjs的ng-model在使用自定义指令后无法工作
- 带ng-model不绑定的Angular指令
- Angular js、ng-model还没有为第三方指令做好准备
- 从指令链接函数内部访问ng-model
- Ng-model在嵌套指令中没有更新
- Angular自定义指令不能将value更改为ng-model