我最近将 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.2here http://jsfiddle.net/Aaronias/dw9Xy/,另一个使用 AngularJS 1.2.0here http://jsfiddle.net/Aaronias/taZN7/.
The 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,那将非常有帮助。