Hier ist, was passiert:
- Sie die Eingabetaste drücken
- ng-keydown Trigger (zu verdauen beginnt)
- Sie rufen
target.blur()
- ng-Blur-Trigger und versucht, einen anderen Digest-Zyklus
zu starten
- Angular klagt
Die Unschärfe wird synchron ausgeführt und löst sofort den Handler aus, ohne den ersten Digest zu beenden.
Meiner Meinung nach ist dies kein Problem mit Ihrem Code, sondern eher ein Angular Bug. Ich habe versucht, eine bessere Lösung zu denken, aber ich kann nur finden:
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
}
})
Danke für diese. Ich habe das nur auf Safari Mobile gesehen. – JimTheDev
Ich hatte dieses Problem in Chrome. Beim Klicken auf eine Schaltfläche wollte ich blur() für ein Eingabeelement aufrufen. Das Hinzufügen der myInput.blur() innerhalb eines Timeouts hat mein Problem behoben! –
Danke Mann! Klappt wunderbar. – Siyah