2016-10-02 41 views
0

我有一个指令make-caps应用于输入元素。当用户输入时,它会将输入框中的所有字符都转换为大写字母。Angularjs指令 - keydown侦听器延迟调用

现在,该指令将其事件侦听器附加到​​事件中。

link : function(scope, element, attrs){ 
    element.bind('keydown', function(event){ 
     //$timeout(function(){ 
      element[0].value = element[0].value.toUpperCase(); 
     //}); 
    }) 
} 

除了最后一个字符被遗漏之外,Uppercasing适用于所有人。如果用户输入elle,它将渲染ELLe。我能够通过将代码包装在$timeout区块中来修复它,但我很好奇为什么不会更新视图,当我设置时element[0].value

代码代码是here

回答

3

这是因为​​事件在新字符添加到输入值之前触发。使用keyup

element.bind('keyup', function(event){ 
    element[0].value = element[0].value.toUpperCase(); 

})