#4030·htmx

HTMX 4 的变形留下复选框和单选按钮状态过时

作者: gwk创建于 2026年9月7日更新于 2026年9月8日

我最近迁移到HTMX4。 在构建新功能时,我遇到了一个复选框的问题,Claude Fable被诊断为形态问题. 虽然我不愿张贴AI生成的bug报告,但我觉得这是个真实的,Fable和Astra都认为他们修好了.

我已证实,这实际上解决了我们眼前的问题。 我还用剧作家在Chrimium和WebKit测试了寓言和Astra。

我遇到的情况是一个触发更新端点的复选框,其中控制本身指定了hx-swap"none",但之后端点返回一个HX-Trigger,用于更大的包含区域.

底部是给我本地的 htmx 副本的更改 如果你想让我打开公关 我很高兴,我没有走那么远,因为我还没完全相信自己的理解。

□ 说明

点击复选框后,将服务器 HTML 转换到现有的输入上,可以更新其“已检查”属性,而无需更新其活的“.已检查”属性。 因此,复选框可以显示不同于服务器响应的状态.

□再现.

  1. Render <div id=" region" ><put id="flag"类型="checkbox" ></div>.
  2. 单击复选框使其变为选中 。
  3. 使用没有 " 检查 " 属性的原始HTML对该区域适用`外部Morph'。

期望: 复用复选框变得不受限制 。 实际:仍在检查。 当以后的答复删除先前添加的 " 经核对 " 属性时,也会出现同样的问题。

□因缘.

一旦一个输入的被检查状态通过交互方式被改变,改变其HTML属性将不再同步它的活状态. 形态执行副本属性,但没有明确同步`.检查'。

第二个问题:`Is EqualNode ()' 比较DOM标记,而不是活输入属性。 解析可以跳过一个完整而未变的子树,包含一个活态不同于所接收到的HTML的复选框.

□ 修补

  • 在将属性复制到再利用的复选框或收音机输入后,指定出oldNode.checked = oldNode.defaultched',将由此产生的checked'属性适用于其活态。
  • 访问包含复选框或收音机输入的子树,即使`IsEqualNode ()'报告标记与模板相同。
  • 保留现有的形态跳过控制并保留输入特性和焦点。
-2172,12+2172,17 var htmx= (()) {
如果 (!) # triggerExtensions(旧节点, “htmx: before:morph: node, {old Node, new Node} ”) 返回;

此. # 复制属性( 有旧节点, 有新节点) ;
+ / / 一旦相互作用,可验证输入的活态不再遵循其已选中属性 。
+ 如果( HTML InputElement 的旧节点实例) { (旧节点类型 “ checkbox ” “ 旧节点类型 ” { “radio ” ) {
+ 旧节点. checked = 旧节点.defaultced;
+}
如果(HTML Texteralement的旧节点实例) 文档. activeElement!=====================================================================================================================================================================================================================================
. . . . . . .

内容来源: bigskysoftware/htmx