Skip to content

Commit 7d2748e

Browse files
crisbetommalerba
authored andcommittedJan 3, 2019
fix(slider): don't handle keyboard events with modifier keys (#14675)
No longer prevents the default actions and changes the model value when handling a keyboard event with a modifier.
1 parent ebdc873 commit 7d2748e

File tree

2 files changed

+27
-3
lines changed

2 files changed

+27
-3
lines changed
 

‎src/lib/slider/slider.spec.ts

+22-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import {
1616
dispatchFakeEvent,
1717
dispatchKeyboardEvent,
1818
dispatchMouseEvent,
19+
createKeyboardEvent,
1920
} from '@angular/cdk/testing';
2021
import {Component, DebugElement, Type, ViewChild} from '@angular/core';
2122
import {ComponentFixture, fakeAsync, flush, TestBed} from '@angular/core/testing';
@@ -995,7 +996,7 @@ describe('MatSlider', () => {
995996
expect(sliderInstance.value).toBe(0);
996997
});
997998

998-
it(`should take not action for presses of keys it doesn't care about`, () => {
999+
it(`should take no action for presses of keys it doesn't care about`, () => {
9991000
sliderInstance.value = 50;
10001001

10011002
expect(testComponent.onChange).not.toHaveBeenCalled();
@@ -1008,6 +1009,26 @@ describe('MatSlider', () => {
10081009
expect(testComponent.onChange).not.toHaveBeenCalled();
10091010
expect(sliderInstance.value).toBe(50);
10101011
});
1012+
1013+
it('should ignore events modifier keys', () => {
1014+
sliderInstance.value = 0;
1015+
1016+
[
1017+
UP_ARROW, DOWN_ARROW, RIGHT_ARROW,
1018+
LEFT_ARROW, PAGE_DOWN, PAGE_UP, HOME, END
1019+
].forEach(key => {
1020+
const event = createKeyboardEvent('keydown', key);
1021+
Object.defineProperty(event, 'altKey', {get: () => true});
1022+
dispatchEvent(sliderNativeElement, event);
1023+
fixture.detectChanges();
1024+
expect(event.defaultPrevented).toBe(false);
1025+
});
1026+
1027+
expect(testComponent.onInput).not.toHaveBeenCalled();
1028+
expect(testComponent.onChange).not.toHaveBeenCalled();
1029+
expect(sliderInstance.value).toBe(0);
1030+
});
1031+
10111032
});
10121033

10131034
describe('slider with direction and invert', () => {

‎src/lib/slider/slider.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import {
1818
PAGE_UP,
1919
RIGHT_ARROW,
2020
UP_ARROW,
21+
hasModifierKey,
2122
} from '@angular/cdk/keycodes';
2223
import {
2324
Attribute,
@@ -582,9 +583,11 @@ export class MatSlider extends _MatSliderMixinBase
582583
}
583584

584585
_onKeydown(event: KeyboardEvent) {
585-
if (this.disabled) { return; }
586+
if (this.disabled || hasModifierKey(event)) {
587+
return;
588+
}
586589

587-
let oldValue = this.value;
590+
const oldValue = this.value;
588591

589592
switch (event.keyCode) {
590593
case PAGE_UP:

0 commit comments

Comments
 (0)
Please sign in to comment.