Oto co się dzieje:
- naciśnięciu klawisza ENTER
- NG-keyDown wyzwalaczy (strawić zaczyna)
- zadzwonić
target.blur()
- ng rozmazaniu wyzwalacze i próbuje rozpocząć kolejny cykl digest
- Angular narzekania
Rozmycie jest wykonywane synchronicznie i natychmiast uruchamia procedurę obsługi bez ukończenia pierwszego skrótu.
Moim zdaniem nie jest to problem z kodem, ale raczej błędem Angular. Próbowałem wymyślić lepszego rozwiązania, ale mogę tylko znaleźć:
app.controller('BlurCtrl', function($scope, $timeout) {
$scope.blurModel = "I'm the value"
$scope.blurOnEnter = function($event) {
if ($event.keyCode != 13)
return
// this will finish the current digest before triggering the blur
$timeout(function() { $event.target.blur() }, 0, false);
}
$scope.onBlur = function() {
$scope.result = this.blurModel
}
})
Dziękuję za to. Widziałem to tylko na urządzeniu mobilnym Safari. – JimTheDev
Miałem ten problem w Chrome. Po kliknięciu przycisku chciałem wywołać funkcję blur() na elemencie wejściowym. Dodanie funkcji myInput.blur() w limicie czasu rozwiązało mój problem! –
Dzięki! Działa jak marzenie. – Siyah