Skip to content
This repository has been archived by the owner on May 29, 2019. It is now read-only.

Commit

Permalink
fix(typeahead): close dropdown on tab with no selection
Browse files Browse the repository at this point in the history
- When no item is selected and tab is hit, close the dropdown

Closes #3340
  • Loading branch information
dlukez authored and wesleycho committed Jul 19, 2015
1 parent f141201 commit 493510d
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 3 deletions.
14 changes: 12 additions & 2 deletions src/typeahead/test/typeahead.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -863,7 +863,7 @@ describe('typeahead tests', function () {
});
});

it('should not capture enter or tab until an item is focused', function () {
it('should not capture enter or tab when an item is not focused', function () {
$scope.select_count = 0;
$scope.onSelect = function ($item, $model, $label) {
$scope.select_count = $scope.select_count + 1;
Expand All @@ -876,10 +876,20 @@ describe('typeahead tests', function () {
expect($scope.keyDownEvent.isDefaultPrevented()).toBeFalsy();
expect($scope.select_count).toEqual(0);

// tab key should not be captured when nothing is focused
// tab key should close the dropdown when nothing is focused
triggerKeyDown(element, 9);
expect($scope.keyDownEvent.isDefaultPrevented()).toBeFalsy();
expect($scope.select_count).toEqual(0);
expect(element).toBeClosed();
});

it('should capture enter or tab when an item is focused', function () {
$scope.select_count = 0;
$scope.onSelect = function ($item, $model, $label) {
$scope.select_count = $scope.select_count + 1;
};
var element = prepareInputEl('<div><input ng-model="result" ng-keydown="keyDownEvent = $event" typeahead="item for item in source | filter:$viewValue" typeahead-on-select="onSelect($item, $model, $label)" typeahead-focus-first="false"></div>');
changeInputValueTo(element, 'b');

// down key should be captured and focus first element
triggerKeyDown(element, 40);
Expand Down
9 changes: 8 additions & 1 deletion src/typeahead/typeahead.js
Original file line number Diff line number Diff line change
Expand Up @@ -332,7 +332,14 @@ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position', 'ui.bootstrap
}

// if there's nothing selected (i.e. focusFirst) and enter is hit, don't do anything
if (scope.activeIdx == -1 && (evt.which === 13 || evt.which === 9)) {
if (scope.activeIdx === -1 && evt.which === 13) {
return;
}

// if there's nothing selected (i.e. focusFirst) and tab is hit, clear the results
if (scope.activeIdx === -1 && evt.which === 9) {
resetMatches();
scope.$digest();
return;
}

Expand Down

0 comments on commit 493510d

Please sign in to comment.