Skip to content

Commit df7ae35

Browse files
authored
fix: prevent opening or selecting item if modifier key is used (#10508) (#10511)
1 parent 17d8f19 commit df7ae35

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

packages/select/src/vaadin-select-base-mixin.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,10 @@ export const SelectBaseMixin = (superClass) =>
340340
* @override
341341
*/
342342
_onKeyDown(e) {
343+
if (e.altKey || e.shiftKey || e.ctrlKey || e.metaKey) {
344+
return;
345+
}
346+
343347
if (e.target === this.focusElement && !this.readonly && !this.disabled && !this.opened) {
344348
if (/^(Enter|SpaceBar|\s|ArrowDown|Down|ArrowUp|Up)$/u.test(e.key)) {
345349
e.preventDefault();

packages/select/test/keyboard.test.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { expect } from '@vaadin/chai-plugins';
22
import { sendKeys } from '@vaadin/test-runner-commands';
3-
import { aTimeout, fixtureSync, nextRender, nextUpdate, outsideClick } from '@vaadin/testing-helpers';
3+
import { aTimeout, fixtureSync, keyboardEventFor, nextRender, nextUpdate, outsideClick } from '@vaadin/testing-helpers';
44
import sinon from 'sinon';
55
import './not-animated-styles.js';
66
import '../src/vaadin-select.js';
@@ -168,5 +168,16 @@ describe('keyboard', () => {
168168
expect(clone.hasAttribute(attr)).to.be.false;
169169
});
170170
});
171+
172+
['ctrl', 'meta', 'alt', 'shift'].forEach((modifierKey) => {
173+
it(`should not select item when ${modifierKey}+key is pressed`, async () => {
174+
// 79 is the key code for 'o'
175+
const event = keyboardEventFor('keydown', 79, [modifierKey], 'o');
176+
valueButton.dispatchEvent(event);
177+
await nextUpdate(select);
178+
179+
expect(select.value).to.equal('');
180+
});
181+
});
171182
});
172183
});

0 commit comments

Comments
 (0)