Skip to content

Commit 3eebc3a

Browse files
committed
selected
1 parent 6273859 commit 3eebc3a

File tree

3 files changed

+19
-1
lines changed

3 files changed

+19
-1
lines changed

packages/svelte/src/compiler/phases/3-transform/client/visitors/RegularElement.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -563,6 +563,8 @@ function build_element_attribute_update_assignment(element, node_id, attribute,
563563
update = b.stmt(b.call('$.set_value', node_id, value));
564564
} else if (name === 'checked') {
565565
update = b.stmt(b.call('$.set_checked', node_id, value));
566+
} else if (name === 'selected') {
567+
update = b.stmt(b.call('$.set_selected', node_id, value));
566568
} else if (is_dom_property(name)) {
567569
update = b.stmt(b.assignment('=', b.member(node_id, name), value));
568570
} else {

packages/svelte/src/internal/client/dom/elements/attributes.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,21 @@ export function set_checked(element, checked) {
8484
element.checked = checked;
8585
}
8686

87+
/**
88+
* Sets the `selected` attribute on an `option` element.
89+
* Not set through the property because that doesn't reflect to the DOM,
90+
* which means it wouldn't be taken into account when a form is reset.
91+
* @param {HTMLOptionElement} element
92+
* @param {boolean} selected
93+
*/
94+
export function set_selected(element, selected) {
95+
if (selected) {
96+
element.setAttribute('selected', '');
97+
} else {
98+
element.removeAttribute('selected');
99+
}
100+
}
101+
87102
/**
88103
* @param {Element} element
89104
* @param {string} attribute

packages/svelte/src/internal/client/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ export {
3333
set_xlink_attribute,
3434
handle_lazy_img,
3535
set_value,
36-
set_checked
36+
set_checked,
37+
set_selected
3738
} from './dom/elements/attributes.js';
3839
export { set_class, set_svg_class, set_mathml_class, toggle_class } from './dom/elements/class.js';
3940
export { apply, event, delegate, replay_events } from './dom/elements/events.js';

0 commit comments

Comments
 (0)