HTMX:禁用子节点上的点击事件
HTMX: disable click event on child nodes
我有以下 div 并希望在单击 id="child" 时它不应该执行到 "/modal/closed" 的获取并且不替换 id="modal"。也就是说,不做任何与 HTMX 相关的事情。
<div id="modal" hx-trigger="click"
hx-swap="outerHTML" hx-target="#modal" hx-get="/modal/closed" hx-params="none">
<div id="child">
</div>
</div>
现在我可以使用触发器“点击消费”来工作,但需要指定一个 hx-get 到 HTTP 路径,returns 什么都没有 (/nop)。
有更简洁的方法吗?
<div id="modal" hx-trigger="click"
hx-swap="outerHTML" hx-target="#modal" hx-get="/modal/closed" hx-params="none">
<div hx-trigger="click consume" hx-swap="none" hx-get="/nop">
</div>
</div>
由于 htmx https://htmx.org/docs/#inheritance 中的属性继承,它以这种方式工作。将 hx-trigger
属性放在最外层的 div 上意味着该元素将监听其所有子元素中的事件。当您使用 consume
修饰符将相同的属性添加到子 div 时,它会停止事件冒泡。
所以这里的解决方案是从外部 div 中删除 hx-trigger
。事实上,如果你想做的是关闭一个模式,你可以在 div 中的其他地方添加一个关闭按钮。像这样:
<div id="modal">
<button id="close" hx-trigger="click"
hx-swap="outerHTML" hx-target="#modal" hx-get="/modal/closed" hx-params="none">Close</button>
<div id="child">
</div>
</div>
现在,当您单击 child
div 事件时,该事件会冒泡并且不会被同级 close
按钮捕获。
这可以使用事件修饰符 "target:#modal"
来解决,以指示我们只对源自 id="modal"
的点击事件感兴趣。
通过这种方式点击 id="child"
气泡最多 id="modal"
将被忽略。
<div id="modal" hx-trigger="click target:#modal"
hx-swap="outerHTML" hx-get="/modal/closed" hx-params="none">
<div id="child">
</div>
</div>
我有以下 div 并希望在单击 id="child" 时它不应该执行到 "/modal/closed" 的获取并且不替换 id="modal"。也就是说,不做任何与 HTMX 相关的事情。
<div id="modal" hx-trigger="click"
hx-swap="outerHTML" hx-target="#modal" hx-get="/modal/closed" hx-params="none">
<div id="child">
</div>
</div>
现在我可以使用触发器“点击消费”来工作,但需要指定一个 hx-get 到 HTTP 路径,returns 什么都没有 (/nop)。
有更简洁的方法吗?
<div id="modal" hx-trigger="click"
hx-swap="outerHTML" hx-target="#modal" hx-get="/modal/closed" hx-params="none">
<div hx-trigger="click consume" hx-swap="none" hx-get="/nop">
</div>
</div>
由于 htmx https://htmx.org/docs/#inheritance 中的属性继承,它以这种方式工作。将 hx-trigger
属性放在最外层的 div 上意味着该元素将监听其所有子元素中的事件。当您使用 consume
修饰符将相同的属性添加到子 div 时,它会停止事件冒泡。
所以这里的解决方案是从外部 div 中删除 hx-trigger
。事实上,如果你想做的是关闭一个模式,你可以在 div 中的其他地方添加一个关闭按钮。像这样:
<div id="modal">
<button id="close" hx-trigger="click"
hx-swap="outerHTML" hx-target="#modal" hx-get="/modal/closed" hx-params="none">Close</button>
<div id="child">
</div>
</div>
现在,当您单击 child
div 事件时,该事件会冒泡并且不会被同级 close
按钮捕获。
这可以使用事件修饰符 "target:#modal"
来解决,以指示我们只对源自 id="modal"
的点击事件感兴趣。
通过这种方式点击 id="child"
气泡最多 id="modal"
将被忽略。
<div id="modal" hx-trigger="click target:#modal"
hx-swap="outerHTML" hx-get="/modal/closed" hx-params="none">
<div id="child">
</div>
</div>