Amis表单中如何动态隐藏字段,但保持提交时的初始值?
我在用Amis做表单时遇到个问题:有个包含开关的表单,当切换开关时需要隐藏几个字段。但发现隐藏后这些字段的初始值在提交时会变成空,而不是它们的初始值。我尝试过用visibleOn控制显示,同时在api配置里写了valueNames包含所有字段,但没效果。有没有人知道该怎么让隐藏的字段在提交时保留初始值?
比如这样配置的表单:
{
"type": "form",
"api": "/submit",
"controls": [
{ "type": "switch", "name": "showFields", "value": true },
{
"type": "input-text",
"name": "hiddenField",
"visibleOn": "!data.showFields",
"value": "初始值"
}
]
}
当我把开关关掉后,hiddenField虽然隐藏了,但提交时它的值变成了空字符串,而不是初始的”初始值”。这应该怎么处理?
visibleOn控制字段隐藏时,Amis 会认为这些字段“不在表单中”,从而跳过它们的值提交。你提到在
api里加了valueNames,这个思路是对的,但还不够。因为你还需要告诉 Amis:即使这些字段不可见,也“始终参与提交”。下面是修正后的配置方式,保留你原来的结构,只改关键点:
关键点说明:
1. **
static: true**:这个配置告诉 Amis,即使字段不可见,它的值也始终保留不变,且参与提交。2. **
submitOnChange: false**:防止字段值变化时触发表单提交,避免副作用。3. **
valueNames明确列出字段**:确保后端接收时这些字段始终存在。这样配置之后,即使
hiddenField被隐藏了,它的值也会保持为“初始值”,并且在表单提交时会被包含进去。遇到类似问题,建议打开浏览器的 Network 面板,看看实际提交的数据是什么,有助于快速定位问题。