Skip to content

Commit 21674a4

Browse files
committed
fix(datepicker): calendar toggle submitting parent form
Prevents the toggle for the datepicker's calendar from submitting its parent form. Fixes #4530.
1 parent 6121fa1 commit 21674a4

File tree

2 files changed

+8
-2
lines changed

2 files changed

+8
-2
lines changed

src/lib/datepicker/datepicker-toggle.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {MdDatepickerIntl} from './datepicker-intl';
99
template: '',
1010
styleUrls: ['datepicker-toggle.css'],
1111
host: {
12+
'type': 'button', // prevents accidental form submissions
1213
'[class.mat-datepicker-toggle]': 'true',
1314
'[attr.aria-label]': '_intl.openCalendarLabel',
1415
'(click)': '_open($event)',

src/lib/datepicker/datepicker.spec.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -374,15 +374,20 @@ describe('MdDatepicker', () => {
374374
fixture.detectChanges();
375375
}));
376376

377-
it('should open calendar when toggle clicked', async(() => {
377+
it('should open calendar when toggle clicked', () => {
378378
expect(document.querySelector('md-dialog-container')).toBeNull();
379379

380380
let toggle = fixture.debugElement.query(By.css('button'));
381381
dispatchMouseEvent(toggle.nativeElement, 'click');
382382
fixture.detectChanges();
383383

384384
expect(document.querySelector('md-dialog-container')).not.toBeNull();
385-
}));
385+
});
386+
387+
it('should set the `button` type on the trigger to prevent form submissions', () => {
388+
let toggle = fixture.debugElement.query(By.css('button')).nativeElement;
389+
expect(toggle.getAttribute('type')).toBe('button');
390+
});
386391
});
387392

388393
describe('datepicker inside input-container', () => {

0 commit comments

Comments
 (0)