我有一种使用angular指令的输入掩码。我正在使用formatters
和blur
事件来格式化模型值以进行显示,我正在使用parsers
和focus
事件来删除格式用户编辑文本框。
我在Internet Explorer中遇到奇怪的行为,如果您使用Tab
键失去焦点,解析器事件会(错误地)触发,因此模型值的更新不正确。
这是一个有角度的错误吗?或者有什么我做错了吗?
这是一个小提琴:https://jsfiddle.net/capesean/htorwgs5/3/
请注意,在IE中,打开控制台窗口,您将看到登出的事件。
另外,在早期的Angular版本上测试它似乎工作正常: https://jsfiddle.net/htorwgs5/4/
指令代码是:
.directive("test", function () {
return {
restrict: "A",
require: 'ngModel',
link: function (scope, element, attr, ngModel) {
// for DOM -> model validation
ngModel.$parsers.unshift(function (value) {
console.log("parser");
ngModel.$setValidity('test', true);
return +value;
});
ngModel.$formatters.unshift(function (value) {
console.log("formatter");
ngModel.$setValidity('test', true);
return (value === undefined ? "" : value) + "!";
});
element.val(scope.minutes);
element.bind("blur", function () {
scope.$apply(function () {
console.log("blur");
element.val((scope.minutes === undefined ? "" : scope.minutes) + "@");
});
});
element.bind("focus", function () {
scope.$apply(function () {
console.log("focus");
element.val(scope.minutes);
});
});
}
};
})
答案 0 :(得分:1)
这是已知的行为。我在这里发布了一个错误报告: https://github.com/angular/angular.js/issues/14987
解决方案是使用$ timeout来延迟元素值的设置,如错误报告的回复中所示。