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

Commit 3dac5e3

Browse files
deegwesleycho
authored andcommitted
fix(typeahead): scroll only parent element
- Changes to scroll only parent element when keyboard navigation is used Closes #5212 Fixes #5180
1 parent db7adf7 commit 3dac5e3

File tree

2 files changed

+23
-8
lines changed

2 files changed

+23
-8
lines changed

Diff for: src/typeahead/test/typeahead.spec.js

+18-5
Original file line numberDiff line numberDiff line change
@@ -689,23 +689,36 @@ describe('typeahead tests', function() {
689689

690690
it('should activate prev/next matches on up/down keys', function() {
691691
changeInputValueTo(element, 'b');
692-
expect(element).toBeOpenWithActive(2, 0);
692+
var parentNode = element.find('ul').eq(0)[0];
693+
var liIndex;
694+
695+
liIndex = 0;
696+
expect(element).toBeOpenWithActive(2, liIndex);
697+
expect(parentNode.scrollTop).toEqual(element.find('li').eq(liIndex)[0].offsetTop);
693698

694699
// Down arrow key
695700
triggerKeyDown(element, 40);
696-
expect(element).toBeOpenWithActive(2, 1);
701+
liIndex = 1;
702+
expect(element).toBeOpenWithActive(2, liIndex);
703+
expect(parentNode.scrollTop).toEqual(element.find('li').eq(liIndex)[0].offsetTop);
697704

698705
// Down arrow key goes back to first element
699706
triggerKeyDown(element, 40);
700-
expect(element).toBeOpenWithActive(2, 0);
707+
liIndex = 0;
708+
expect(element).toBeOpenWithActive(2, liIndex);
709+
expect(parentNode.scrollTop).toEqual(element.find('li').eq(liIndex)[0].offsetTop);
701710

702711
// Up arrow key goes back to last element
703712
triggerKeyDown(element, 38);
704-
expect(element).toBeOpenWithActive(2, 1);
713+
liIndex = 1;
714+
expect(element).toBeOpenWithActive(2, liIndex);
715+
expect(parentNode.scrollTop).toEqual(element.find('li').eq(liIndex)[0].offsetTop);
705716

706717
// Up arrow key goes back to first element
707718
triggerKeyDown(element, 38);
708-
expect(element).toBeOpenWithActive(2, 0);
719+
liIndex = 0;
720+
expect(parentNode.scrollTop).toEqual(element.find('li').eq(liIndex)[0].offsetTop);
721+
expect(element).toBeOpenWithActive(2, liIndex);
709722
});
710723

711724
it('should close popup on escape key', function() {

Diff for: src/typeahead/typeahead.js

+5-3
Original file line numberDiff line numberDiff line change
@@ -372,7 +372,7 @@ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.debounce', 'ui.bootstrap
372372
}
373373

374374
evt.preventDefault();
375-
375+
var target;
376376
switch (evt.which) {
377377
case 9:
378378
case 13:
@@ -395,12 +395,14 @@ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.debounce', 'ui.bootstrap
395395
case 38:
396396
scope.activeIdx = (scope.activeIdx > 0 ? scope.activeIdx : scope.matches.length) - 1;
397397
scope.$digest();
398-
popUpEl.find('li')[scope.activeIdx].scrollIntoView(false);
398+
target = popUpEl.find('li')[scope.activeIdx];
399+
target.parentNode.scrollTop = target.offsetTop;
399400
break;
400401
case 40:
401402
scope.activeIdx = (scope.activeIdx + 1) % scope.matches.length;
402403
scope.$digest();
403-
popUpEl.find('li')[scope.activeIdx].scrollIntoView(false);
404+
target = popUpEl.find('li')[scope.activeIdx];
405+
target.parentNode.scrollTop = target.offsetTop;
404406
break;
405407
}
406408
});

0 commit comments

Comments
 (0)