diff --git a/components/script/dom/htmloptionelement.rs b/components/script/dom/htmloptionelement.rs index 066a264b6531..64defdd9235f 100644 --- a/components/script/dom/htmloptionelement.rs +++ b/components/script/dom/htmloptionelement.rs @@ -140,11 +140,11 @@ impl HTMLOptionElementMethods for HTMLOptionElement { self.dirtiness.set(true); self.selectedness.set(selected); if let Some(select) = self.upcast::().ancestors() - .filter_map(Root::downcast::).next() { - if selected { - select.pick_option(self); - } - select.ask_for_reset(); + .filter_map(Root::downcast::).next() { + if selected { + select.pick_option(self); + } + select.ask_for_reset(); } } } @@ -198,13 +198,13 @@ impl VirtualMethods for HTMLOptionElement { self.upcast::().check_parent_disabled_state_for_option(); - if self.Selected() { - let node = self.upcast::(); - if let Some(select) = node.ancestors() - .filter_map(Root::downcast::) - .next() { + if let Some(select) = self.upcast::().ancestors() + .filter_map(Root::downcast::) + .next() { + if self.Selected() { select.pick_option(self); } + select.ask_for_reset(); } } diff --git a/components/script/dom/htmlselectelement.rs b/components/script/dom/htmlselectelement.rs index 20e473b88c9e..4fd69b390db9 100644 --- a/components/script/dom/htmlselectelement.rs +++ b/components/script/dom/htmlselectelement.rs @@ -64,7 +64,7 @@ impl HTMLSelectElement { opt.set_selectedness(false); last_selected = Some(Root::from_ref(opt.r())); } - let element = opt.upcast::(); + let element = opt.upcast::(); if first_enabled.is_none() && !element.get_disabled_state() { first_enabled = Some(Root::from_ref(opt.r())); } @@ -82,6 +82,7 @@ impl HTMLSelectElement { } } + // https://html.spec.whatwg.org/multipage/#concept-select-pick pub fn pick_option(&self, picked: &HTMLOptionElement) { if !self.Multiple() { let node = self.upcast::();