Ver Fonte

Merge pull request #926 from Demonthos/prevent-default-form-web

Jonathan Kelley há 1 ano atrás
pai
commit
af254102d0
1 ficheiros alterados com 13 adições e 3 exclusões
  1. 13 3
      packages/web/src/dom.rs

+ 13 - 3
packages/web/src/dom.rs

@@ -56,17 +56,27 @@ impl WebsysDom {
                 let element = walk_event_for_id(event);
                 let element = walk_event_for_id(event);
                 let bubbles = dioxus_html::event_bubbles(name.as_str());
                 let bubbles = dioxus_html::event_bubbles(name.as_str());
                 if let Some((element, target)) = element {
                 if let Some((element, target)) = element {
+                    let prevent_event;
                     if let Some(prevent_requests) = target
                     if let Some(prevent_requests) = target
                         .get_attribute("dioxus-prevent-default")
                         .get_attribute("dioxus-prevent-default")
                         .as_deref()
                         .as_deref()
                         .map(|f| f.split_whitespace())
                         .map(|f| f.split_whitespace())
                     {
                     {
-                        if prevent_requests
+                        prevent_event = prevent_requests
                             .map(|f| f.trim_start_matches("on"))
                             .map(|f| f.trim_start_matches("on"))
-                            .any(|f| f == name)
-                        {
+                            .any(|f| f == name);
+                    } else {
+                        prevent_event = false;
+                    }
+
+                    // Prevent forms from submitting and redirecting
+                    if name == "submit" {
+                        // On forms the default behavior is not to submit, if prevent default is set then we submit the form
+                        if !prevent_event {
                             event.prevent_default();
                             event.prevent_default();
                         }
                         }
+                    } else if prevent_event {
+                        event.prevent_default();
                     }
                     }
 
 
                     let data = virtual_event_from_websys_event(event.clone(), target);
                     let data = virtual_event_from_websys_event(event.clone(), target);