我最近将我的 AngularJS 框架从 1.2.0-rc.2 升级到了 1.2.0 版本,并遇到了一个我还没有找到解决办法的奇怪问题。我之前解决的问题是强制输入字段在 on-blur 事件而不是 on-change 事件上触发。我最初使用的指令的代码是:
angular.module('app', []).directive('ngModelOnblur', function() {
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, elm, attr, ngModelCtrl) {
if (attr.type === 'radio' || attr.type === 'checkbox') return;
elm.unbind('input').unbind('keydown').unbind('change');
elm.bind('blur', function() {
scope.$apply(function() {
ngModelCtrl.$setViewValue(elm.val());
});
});
}
};
});
这只是使用这里找到的建议https://groups.google.com/forum/?fromgroups#!searchin/angular/change$20blur/angular/LH0Q1A-qTVo/eyVIjJsFZGcJ
我创建了两个 jsFiddles,一个在这里使用 AngularJS 1.2.0-rc.2 ,另一个在这里使用AngularJS 1.2.0 。
该ngModleOnBlur
指令应从元素中删除'change'
绑定<input>
并添加显式'blur'
绑定。
您会注意到小提琴的行为有所不同,例如绑定elm.bind('blur', function(){...})
实际上并未正确绑定到元素,并且elm.unbind('input').unbind('keydown').unbind('change')
在 1.2.0 中似乎不一样。
我知道新ng-blur
指令,但在我的情况下,我不能直接使用它,而是需要手动覆盖绑定到元素的事件。如果有人可以发布一个关于如何手动覆盖绑定到元素的事件的工作 jsfiddle,和/或解释为什么它从 1.2.0-rc.2 更改为 1.2.0,那将非常有帮助。