Просмотр исходного кода

Fix events with a text node target

Evan Almloff 1 год назад
Родитель
Сommit
d1603238c4
1 измененных файлов с 12 добавлено и 3 удалено
  1. 12 3
      packages/interpreter/src/interpreter.js

+ 12 - 3
packages/interpreter/src/interpreter.js

@@ -390,7 +390,11 @@ class Interpreter {
 function handler(event, name, bubbles, config) {
   let target = event.target;
   if (target != null) {
-    let preventDefaultRequests = target.getAttribute(`dioxus-prevent-default`);
+    let preventDefaultRequests = null;
+    // Some events can be triggered on text nodes, which don't have attributes
+    if (target instanceof Element) {
+      preventDefaultRequests = target.getAttribute(`dioxus-prevent-default`);
+    }
 
     if (event.type === "click") {
       // todo call prevent default if it's the right type of event
@@ -474,7 +478,10 @@ function handler(event, name, bubbles, config) {
 }
 
 function find_real_id(target) {
-  let realId = target.getAttribute(`data-dioxus-id`);
+  let realId = null;
+  if (target instanceof Element) {
+    realId = target.getAttribute(`data-dioxus-id`);
+  }
   // walk the tree to find the real element
   while (realId == null) {
     // we've reached the root we don't want to send an event
@@ -483,7 +490,9 @@ function find_real_id(target) {
     }
 
     target = target.parentElement;
-    realId = target.getAttribute(`data-dioxus-id`);
+    if (target instanceof Element) {
+      realId = target.getAttribute(`data-dioxus-id`);
+    }
   }
   return realId;
 }