HTMX默认目标为何不生效?父元素target影响子元素问题咨询
问题解答
这是HTMX的正确行为,因为HTMX的属性继承机制会让子元素自动继承父元素的hx-target(以及hx-swap等其他HTMX属性),除非子元素显式声明自身属性来覆盖。
你觉得“违背默认目标设计初衷”其实是误解了HTMX的设计逻辑:这种继承机制是为了方便批量配置——如果多个子元素需要使用相同的目标、交换方式等,只需要在父元素上设置一次,不用给每个子元素重复写属性。
要让<span>的响应回到自身的innerHTML,只需要给它显式设置hx-target="this"即可,修改后的代码如下:
{% extends 'base.html' %} {% block content %} <h1>Book Recommendations</h1> <form hx-post="/book" hx-swap="beforeend" hx-target="#new-book" class="mb-3"> <span hx-get="/books/count" hx-trigger="load" hx-target="this"></span> </form> <div id="new-book"> <p>a table goes here</p> <!-- 现在/books/count的响应会加载到span里,而不是这里 --> </div> {% endblock %}
简单总结:
- 父元素的HTMX属性会被子元素继承,这是默认行为
- 子元素可以通过显式设置同名属性(比如
hx-target="this")来覆盖继承的配置
内容的提问来源于stack exchange,提问作者redOctober13
相关产品推荐
相关产品推荐

