Skip to content

Commit a18d777

Browse files
committed
update home and end opening behavior
1 parent 7410e4a commit a18d777

File tree

2 files changed

+33
-30
lines changed

2 files changed

+33
-30
lines changed

examples/combobox/combobox-select-only.html

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ <h2 id="ex_label">Example</h2>
4545
<label id="combo1-label" class="combo-label">Favorite Fruit</label>
4646
<div class="combo js-select">
4747
<div
48-
aria-autocomplete="none"
4948
aria-controls="listbox1"
5049
aria-expanded="false"
5150
aria-haspopup="listbox"

examples/combobox/js/select-only.js

Lines changed: 33 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,20 @@ function filterOptions(options = [], filter, exclude = []) {
2929
// map a key press to an action
3030
function getActionFromKey(event, menuOpen) {
3131
const { key, altKey, ctrlKey, metaKey } = event;
32-
const openKeys = ['ArrowDown', 'ArrowUp', 'Enter', ' ', 'Home', 'End']; // all keys that will open the combo
32+
const openKeys = ['ArrowDown', 'ArrowUp', 'Enter', ' ']; // all keys that will do the default open action
3333
// handle opening when closed
3434
if (!menuOpen && openKeys.includes(key)) {
3535
return SelectActions.Open;
3636
}
3737

38+
// home and end move the selected option when open or closed
39+
if (key === 'Home') {
40+
return SelectActions.First;
41+
}
42+
if (key === 'End') {
43+
return SelectActions.Last;
44+
}
45+
3846
// handle typing characters when open or closed
3947
if (key === 'Backspace' || key === 'Clear' || (key.length === 1 && key !== ' ' && !altKey && !ctrlKey && !metaKey)) {
4048
return SelectActions.Type;
@@ -45,18 +53,12 @@ function getActionFromKey(event, menuOpen) {
4553
if (key === 'ArrowUp' && altKey) {
4654
return SelectActions.CloseSelect;
4755
}
48-
if (key === 'ArrowDown' && !altKey) {
56+
else if (key === 'ArrowDown' && !altKey) {
4957
return SelectActions.Next;
5058
}
5159
else if (key === 'ArrowUp') {
5260
return SelectActions.Previous;
5361
}
54-
else if (key === 'Home') {
55-
return SelectActions.First;
56-
}
57-
else if (key === 'End') {
58-
return SelectActions.Last;
59-
}
6062
else if (key === 'PageUp') {
6163
return SelectActions.PageUp;
6264
}
@@ -236,27 +238,29 @@ Select.prototype.onComboKeyDown = function(event) {
236238
const action = getActionFromKey(event, this.open);
237239

238240
switch(action) {
239-
case SelectActions.Next:
240-
case SelectActions.Last:
241-
case SelectActions.First:
242-
case SelectActions.Previous:
243-
case SelectActions.PageUp:
244-
case SelectActions.PageDown:
245-
event.preventDefault();
246-
return this.onOptionChange(getUpdatedIndex(this.activeIndex, max, action));
247-
case SelectActions.CloseSelect:
248-
event.preventDefault();
249-
this.selectOption(this.activeIndex);
250-
// intentional fallthrough
251-
case SelectActions.Close:
252-
event.preventDefault();
253-
return this.updateMenuState(false);
254-
case SelectActions.Type:
255-
return this.onComboType(key);
256-
case SelectActions.Open:
257-
event.preventDefault();
258-
return this.updateMenuState(true);
259-
}
241+
case SelectActions.Last:
242+
case SelectActions.First:
243+
this.updateMenuState(true);
244+
// intentional fallthrough
245+
case SelectActions.Next:
246+
case SelectActions.Previous:
247+
case SelectActions.PageUp:
248+
case SelectActions.PageDown:
249+
event.preventDefault();
250+
return this.onOptionChange(getUpdatedIndex(this.activeIndex, max, action));
251+
case SelectActions.CloseSelect:
252+
event.preventDefault();
253+
this.selectOption(this.activeIndex);
254+
// intentional fallthrough
255+
case SelectActions.Close:
256+
event.preventDefault();
257+
return this.updateMenuState(false);
258+
case SelectActions.Type:
259+
return this.onComboType(key);
260+
case SelectActions.Open:
261+
event.preventDefault();
262+
return this.updateMenuState(true);
263+
}
260264
}
261265

262266
Select.prototype.onComboType = function(letter) {

0 commit comments

Comments
 (0)