我最近将我的 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,那将非常有帮助。