Allow multiple prevent default for Web, Desktop and LiveView (#987)

* Allow multiple prevent default in dioxus_web

* Use SplitWhitespace for prevent default requests

* Add multiple prevent default option to liveview and desktop

* Update docs about prevent_default attribute

* cargo clippy

* update prevent default guide example

---------

Co-authored-by: Evan Almloff <ealmlof1@stumail.jccc.edu>
This commit is contained in:
AttilioandEvan Almloff authored and GitHub committed 2023-04-27 11:26:04 -05:00
1 parent c904411190
commit c645e1c6aa
4 files changed
+21 -14

No files matched your search

+11 -7
View File
@@ -352,7 +352,7 @@ class Interpreter {
let target = event.target;
if (target != null) {
let realId = target.getAttribute(`data-dioxus-id`);
let shouldPreventDefault = target.getAttribute(
let preventDefaultRequests = target.getAttribute(
`dioxus-prevent-default`
);
@@ -361,10 +361,14 @@ class Interpreter {
let a_element = target.closest("a");
if (a_element != null) {
event.preventDefault();
if (
shouldPreventDefault !== `onclick` &&
a_element.getAttribute(`dioxus-prevent-default`) !== `onclick`
) {
let elementShouldPreventDefault =
preventDefaultRequests.includes(`onclick`);
let linkShouldPreventDefault = a_element
.getAttribute(`dioxus-prevent-default`)
.includes(`onclick`);
if (!elementShouldPreventDefault && !linkShouldPreventDefault) {
const href = a_element.getAttribute("href");
if (href !== "" && href !== null && href !== undefined) {
window.ipc.postMessage(
@@ -390,13 +394,13 @@ class Interpreter {
realId = target.getAttribute(`data-dioxus-id`);
}
shouldPreventDefault = target.getAttribute(
preventDefaultRequests = target.getAttribute(
`dioxus-prevent-default`
);
let contents = serialize_event(event);
if (shouldPreventDefault === `on${event.type}`) {
if (preventDefaultRequests.includes(`on${event.type}`)) {
event.preventDefault();
}