2016-08-04 53 views
0

我有一种使用角度指令的输入掩码类型。我正在使用formattersblur事件来格式化显示的模型值,并且我使用parsersfocus事件来删除用户编辑文本框时的格式。角函数解析器调用模糊

我在Internet Explorer中出现奇怪的行为,如果您使用Tab键失去焦点,解析器事件将(错误地)触发,因此模型值将被错误地更新。

这是一个角度的错误吗?还是有什么我做错了?

这里是一个小提琴:https://jsfiddle.net/capesean/htorwgs5/3/

注意,在IE浏览器,你的控制台窗口打开,你会看到事件注销。

此外,在早期版本的角度测试此,似乎很好地工作:

该指令代码:

.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

这两个强盗似乎功能相同;使用IE 11 Windows 10.我没有看到你在这里描述的。 – Claies

+0

@Claies用“5!”点击输入初始值,然后标签出。模型值(在按钮之前输出)转换为NaN。单击回到输入,将输入值转换为NaN。 – Sean

+0

这似乎相关:https://github.com/angular/angular.js/blob/master/CHANGELOG.md#bug-fixes-55。 “ngModel:执行$ validate时不运行分析器”。您可能需要查看此更改并进行修复,并查看它是否存在问题,以及是否仍然存在问题。 – Claies

回答