2016-10-02 3 views
0

Ich habe eine Direktive make-caps auf ein Eingabeelement angewendet. Es konvertiert alle Zeichen im Eingabefeld in Großbuchstaben, wenn der Benutzer es eingibt.Angularjs Direktive - Keydown-Listener wird mit Verzögerung aufgerufen

Jetzt ist der Ereignis-Listener der Direktive an das Ereignis keydown angehängt.

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

Oberschale funktioniert für alle, außer dass das letzte Zeichen weggelassen wird. Wenn der Benutzer elle eingibt, wird ELLe gerendert. Ich bin in der Lage, es zu beheben, indem Sie den Code in $timeout Block Einwickeln, aber ich bin neugierig, warum nicht die Ansicht aktualisiert werden, wenn i element[0].value gesetzt

Plunker Code ist here.

Antwort

3

Dies liegt daran, dass keydown Ereignisse ausgelöst werden, bevor das neue Zeichen zum Wert der Eingabe hinzugefügt wird. Verwenden Sie keyup

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

})