fix: filtering for buttons

This commit is contained in:
Jonathan Kelley 2022-03-13 18:53:20 -04:00
parent 71c96a8053
commit 2d2de36eed
2 changed files with 22 additions and 12 deletions

View file

@ -11,6 +11,7 @@ fn main() {
fn app(cx: Scope) -> Element {
cx.render(rsx! {
Router {
div {
h1 { "Form" }
form {
@ -19,7 +20,8 @@ fn app(cx: Scope) -> Element {
input { r#type: "text", name: "username" }
input { r#type: "text", name: "full-name" }
input { r#type: "password", name: "password" }
button { "Submit the form" }
button { r#type: "submit", value: "Submit", "Submit the form" }
}
}
}
})

View file

@ -77,7 +77,7 @@ export class Interpreter {
const element = this.nodes[root];
element.setAttribute("data-dioxus-id", `${root}`);
if (this.listeners[event_name] === undefined) {
this.listeners[event_name] = 0;
this.listeners[event_name] = 1;
this.handlers[event_name] = handler;
this.root.addEventListener(event_name, handler);
} else {
@ -190,9 +190,13 @@ export class Interpreter {
this.RemoveEventListener(edit.root, edit.event_name);
break;
case "NewEventListener":
console.log(this.listeners);
// this handler is only provided on desktop implementations since this
// method is not used by the web implementation
let handler = (event) => {
console.log(event);
let target = event.target;
if (target != null) {
let realId = target.getAttribute(`data-dioxus-id`);
@ -215,7 +219,7 @@ export class Interpreter {
}
// also prevent buttons from submitting
if (target.tagName === "BUTTON") {
if (target.tagName === "BUTTON" && event.type == "submit") {
event.preventDefault();
}
}
@ -239,11 +243,15 @@ export class Interpreter {
if (shouldPreventDefault === `on${event.type}`) {
event.preventDefault();
}
if (event.type === "submit") {
event.preventDefault();
}
if (target.tagName === "FORM") {
if (
target.tagName === "FORM" &&
(event.type === "submit" || event.type === "input")
) {
for (let x = 0; x < target.elements.length; x++) {
let element = target.elements[x];
let name = element.getAttribute("name");