Skip to content
This repository was archived by the owner on Sep 5, 2024. It is now read-only.

Commit 313e5e6

Browse files
Splaktarandrewseguin
authored andcommitted
fix(autocomplete): support ng-click on md-autocomplete (#11758)
Relates to #11625. Relates to #11757.
1 parent 8f14afd commit 313e5e6

File tree

2 files changed

+34
-4
lines changed

2 files changed

+34
-4
lines changed

src/components/autocomplete/autocomplete.spec.js

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -536,6 +536,32 @@ describe('<md-autocomplete>', function() {
536536
element.remove();
537537
}));
538538

539+
it('should support ng-click on the md-autocomplete', inject(function() {
540+
var scope = createScope(null, {inputId: 'custom-input-id'});
541+
scope.test = false;
542+
var template =
543+
'<md-autocomplete ' +
544+
'md-selected-item="selectedItem" ' +
545+
'md-search-text="searchText" ' +
546+
'md-items="item in match(searchText)" ' +
547+
'md-item-text="item.display" ' +
548+
'ng-click="test = true" ' +
549+
'placeholder="placeholder">' +
550+
' <span md-highlight-text="searchText">{{item.display}}</span>' +
551+
'</md-autocomplete>';
552+
553+
var element = compile(template, scope);
554+
var input = element.find('input');
555+
556+
expect(scope.test).toBe(false);
557+
558+
input[0].click();
559+
560+
expect(scope.test).toBe(true);
561+
562+
element.remove();
563+
}));
564+
539565
it('should support ng-trim for the search input', inject(function() {
540566
var scope = createScope(null, {inputId: 'custom-input-id'});
541567
var template =
@@ -615,7 +641,7 @@ describe('<md-autocomplete>', function() {
615641
element.remove();
616642
}));
617643

618-
it('always sets the tabindex of the autcomplete to `-1`', inject(function() {
644+
it('always sets the tabindex of the autocomplete to `-1`', inject(function() {
619645
var scope = createScope(null, {inputId: 'custom-input-id'});
620646
var template =
621647
'<md-autocomplete ' +

src/components/autocomplete/js/autocompleteDirective.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -362,9 +362,15 @@ function MdAutocomplete ($$mdSvgRegistry) {
362362
}
363363

364364
scope.mdMode = getRepeatMode(attrs.mdMode);
365+
366+
// Stop click events from bubbling up to the document and triggering a flicker of the
367+
// options panel while still supporting ng-click to be placed on md-autocomplete.
368+
element.on('click', function(event) {
369+
event.stopPropagation();
370+
});
365371
};
366372
},
367-
template: function (element, attr) {
373+
template: function (element, attr) {
368374
var noItemsTemplate = getNoItemsTemplate(),
369375
itemTemplate = getItemTemplate(),
370376
leftover = element.html(),
@@ -493,7 +499,6 @@ function MdAutocomplete ($$mdSvgRegistry) {
493499
ng-keydown="$mdAutocompleteCtrl.keydown($event)"\
494500
ng-blur="$mdAutocompleteCtrl.blur($event)"\
495501
ng-focus="$mdAutocompleteCtrl.focus($event)"\
496-
ng-click="$event.stopPropagation()"\
497502
aria-label="{{floatingLabel}}"\
498503
aria-autocomplete="list"\
499504
role="combobox"\
@@ -521,7 +526,6 @@ function MdAutocomplete ($$mdSvgRegistry) {
521526
ng-keydown="$mdAutocompleteCtrl.keydown($event)"\
522527
ng-blur="$mdAutocompleteCtrl.blur($event)"\
523528
ng-focus="$mdAutocompleteCtrl.focus($event)"\
524-
ng-click="$event.stopPropagation()"\
525529
placeholder="{{placeholder}}"\
526530
aria-label="{{placeholder}}"\
527531
aria-autocomplete="list"\

0 commit comments

Comments
 (0)