Browse Source

fix double triggering events

Evan Almloff 1 year ago
parent
commit
ed95ac932d
1 changed files with 5 additions and 21 deletions
  1. 5 21
      packages/core/src/virtual_dom.rs

+ 5 - 21
packages/core/src/virtual_dom.rs

@@ -375,30 +375,14 @@ impl VirtualDom {
                     for (idx, attr) in template.dynamic_attrs.iter().enumerate() {
                         let this_path = node_template.attr_paths[idx];
 
-                        fn add_listener<'a>(
-                            attribute: &'a Attribute<'a>,
-                            event_name: &str,
-                            listeners: &mut Vec<&'a AttributeValue<'a>>,
-                        ) {
-                            if attribute.name.trim_start_matches("on") == event_name {
-                                listeners.push(&attribute.value);
-                            }
-
-                            listeners.push(&attribute.value);
-                        }
-
                         // Remove the "on" prefix if it exists, TODO, we should remove this and settle on one
                         if target_path.is_decendant(&this_path) {
-                            match &attr.ty {
-                                AttributeType::Single(attribute) => {
-                                    add_listener(attribute, name, &mut listeners);
+                            attr.ty.for_each(|attribute| {
+                                if attribute.name.trim_start_matches("on") == name {
+                                    listeners.push(&attribute.value);
                                 }
-                                AttributeType::Many(attributes) => {
-                                    for attribute in *attributes {
-                                        add_listener(attribute, name, &mut listeners);
-                                    }
-                                }
-                            }
+                            });
+
                             // Break if this is the exact target element.
                             // This means we won't call two listeners with the same name on the same element. This should be
                             // documented, or be rejected from the rsx! macro outright