Skip to content

Commit 3956f90

Browse files
committed
Add keynav support to dropdown (angular-ui#1228)
1 parent ed4db50 commit 3956f90

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

src/dropdown/dropdown.js

+36
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,42 @@ angular.module('ui.bootstrap.dropdown', ['ui.bootstrap.position'])
246246
};
247247
})
248248

249+
.directive('keyboardNav', function() {
250+
return {
251+
restrict: 'A',
252+
require: '?^dropdown',
253+
link: function (scope, element, attrs, dropdownCtrl) {
254+
255+
element.bind('keydown', function(e) {
256+
257+
e.preventDefault();
258+
e.stopPropagation();
259+
260+
var elems = angular.element(element).find('a');
261+
switch (e.keyCode) {
262+
case (40): // Down
263+
{
264+
265+
if ( !angular.isNumber(dropdownCtrl.selectedOption) ) {
266+
dropdownCtrl.selectedOption = 0;
267+
} else {
268+
dropdownCtrl.selectedOption = (dropdownCtrl.selectedOption === elems.length -1 ? dropdownCtrl.selectedOption : dropdownCtrl.selectedOption+1);
269+
}
270+
271+
}
272+
break;
273+
case (38): // Up
274+
{
275+
dropdownCtrl.selectedOption = (dropdownCtrl.selectedOption === 0 ? 0 : dropdownCtrl.selectedOption-1);
276+
}
277+
break;
278+
}
279+
elems[dropdownCtrl.selectedOption].focus();
280+
});
281+
}
282+
};
283+
})
284+
249285
.directive('dropdownToggle', function() {
250286
return {
251287
require: '?^dropdown',

0 commit comments

Comments
 (0)