From 5c003c491eb5ba18a7ac75382b5c402db4b32931 Mon Sep 17 00:00:00 2001 From: Ilya Shishkin Date: Wed, 16 Dec 2020 16:38:08 +0300 Subject: [PATCH 1/2] fix(autocomplete): prevent flashing of invalid state - when user clicks on suggestion, input element lost focus and then programmatically get focused - again, add stop immediate propogation to prevent blur event handling by other handlers which - update ng-model validity state Fixes #10975 --- src/components/autocomplete/js/autocompleteController.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/components/autocomplete/js/autocompleteController.js b/src/components/autocomplete/js/autocompleteController.js index a3b8ffd2b05..fa0234d5cbf 100644 --- a/src/components/autocomplete/js/autocompleteController.js +++ b/src/components/autocomplete/js/autocompleteController.js @@ -601,6 +601,8 @@ function MdAutocompleteCtrl ($scope, $element, $mdUtil, $mdConstant, $mdTheming, if (!noBlur) { ctrl.hidden = shouldHide(); evalAttr('ngBlur', { $event: $event }); + } else { + $event.stopImmediatePropagation(); } } From 02f6f8db07c7def3e9c196529915a70f3b6e7787 Mon Sep 17 00:00:00 2001 From: Ilya Shishkin Date: Thu, 17 Dec 2020 12:31:58 +0300 Subject: [PATCH 2/2] fix(autocomplete): add check that the event is an object - function blur most often called without an argument Fixes #10975 --- src/components/autocomplete/js/autocompleteController.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/autocomplete/js/autocompleteController.js b/src/components/autocomplete/js/autocompleteController.js index fa0234d5cbf..6224f7d6391 100644 --- a/src/components/autocomplete/js/autocompleteController.js +++ b/src/components/autocomplete/js/autocompleteController.js @@ -594,6 +594,7 @@ function MdAutocompleteCtrl ($scope, $element, $mdUtil, $mdConstant, $mdTheming, /** * Handles input blur event, determines if the dropdown should hide. + * @param {Event=} $event */ function blur($event) { hasFocus = false; @@ -601,7 +602,7 @@ function MdAutocompleteCtrl ($scope, $element, $mdUtil, $mdConstant, $mdTheming, if (!noBlur) { ctrl.hidden = shouldHide(); evalAttr('ngBlur', { $event: $event }); - } else { + } else if (angular.isObject($event)) { $event.stopImmediatePropagation(); } }