mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-27 01:50:24 +00:00
LibWeb: Make <input type=checkbox> fire click events when clicked :^)
This makes React react to checkboxes. Apparently they ignore the "change" event in favor of "click" on checkboxes. This is a compatibility hack for IE8.
This commit is contained in:
parent
2660795bcf
commit
246c31ccf6
Notes:
sideshowbarker
2024-07-17 18:37:58 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/246c31ccf6
3 changed files with 13 additions and 1 deletions
|
@ -41,6 +41,14 @@ void HTMLInputElement::did_click_button(Badge<Layout::ButtonBox>)
|
|||
}
|
||||
}
|
||||
|
||||
void HTMLInputElement::did_click_checkbox(Badge<Layout::CheckBox>)
|
||||
{
|
||||
// FIXME: This should be a PointerEvent.
|
||||
auto click_event = DOM::Event::create(EventNames::click);
|
||||
click_event->set_bubbles(true);
|
||||
dispatch_event(move(click_event));
|
||||
}
|
||||
|
||||
RefPtr<Layout::Node> HTMLInputElement::create_layout_node(NonnullRefPtr<CSS::StyleProperties> style)
|
||||
{
|
||||
if (type() == "hidden")
|
||||
|
|
|
@ -43,6 +43,7 @@ public:
|
|||
bool enabled() const;
|
||||
|
||||
void did_click_button(Badge<Layout::ButtonBox>);
|
||||
void did_click_checkbox(Badge<Layout::CheckBox>);
|
||||
|
||||
void did_edit_text_node(Badge<BrowsingContext>);
|
||||
|
||||
|
|
|
@ -62,8 +62,10 @@ void CheckBox::handle_mouseup(Badge<EventHandler>, const Gfx::IntPoint& position
|
|||
if (!is_inside_node_or_label)
|
||||
is_inside_node_or_label = Label::is_inside_associated_label(*this, position);
|
||||
|
||||
if (is_inside_node_or_label)
|
||||
if (is_inside_node_or_label) {
|
||||
dom_node().did_click_checkbox({});
|
||||
dom_node().set_checked(!dom_node().checked(), HTML::HTMLInputElement::ChangeSource::User);
|
||||
}
|
||||
|
||||
m_being_pressed = false;
|
||||
m_tracking_mouse = false;
|
||||
|
@ -103,6 +105,7 @@ void CheckBox::handle_associated_label_mouseup(Badge<Label>)
|
|||
// NOTE: Changing the checked state of the DOM node may run arbitrary JS, which could disappear this node.
|
||||
NonnullRefPtr protect = *this;
|
||||
|
||||
dom_node().did_click_checkbox({});
|
||||
dom_node().set_checked(!dom_node().checked(), HTML::HTMLInputElement::ChangeSource::User);
|
||||
m_being_pressed = false;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue