Skip to content

Commit 8b3016c

Browse files
fix(@react-aria/select): avoid empty option in hidden select markup (adobe#9677)
Co-authored-by: Robert Snow <rsnow@adobe.com>
1 parent db6c934 commit 8b3016c

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

packages/@react-aria/select/src/HiddenSelect.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ export function HiddenSelect<T, M extends SelectionMode = 'single'>(props: Hidde
157157
<label>
158158
{label}
159159
<select {...selectProps} ref={selectRef}>
160-
<option />
160+
<option value="" label={'\u00A0'}>{'\u00A0'}</option>
161161
{[...state.collection.getKeys()].map(key => {
162162
let item = state.collection.getItem(key);
163163
if (item && item.type === 'item') {

packages/@react-aria/select/test/HiddenSelect.test.tsx

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,36 @@ describe('<HiddenSelect />', () => {
8484
expect(onSelectionChange).toBeCalledWith('5');
8585
});
8686

87+
it('should include a non-empty placeholder option for native select markup', () => {
88+
render(
89+
<HiddenSelectExample
90+
label="select"
91+
items={makeItems(5)} />
92+
);
93+
94+
let select = screen.getByLabelText('select');
95+
let firstOption = select.querySelector('option')!;
96+
97+
expect(firstOption).toHaveAttribute('value', '');
98+
expect(firstOption).toHaveAttribute('label', '\u00A0');
99+
});
100+
101+
it('should submit an empty string when no value is selected', () => {
102+
let formRef = React.createRef<HTMLFormElement>();
103+
render(
104+
<form ref={formRef}>
105+
<HiddenSelectExample
106+
hiddenProps={{
107+
name: 'select'
108+
}}
109+
items={makeItems(5)} />
110+
</form>
111+
);
112+
113+
let formData = new FormData(formRef.current!);
114+
expect(formData.get('select')).toEqual('');
115+
});
116+
87117
it('should always add a data attribute data-a11y-ignore="aria-hidden-focus"', () => {
88118
render(
89119
<HiddenSelectExample items={makeItems(5)} />

0 commit comments

Comments
 (0)