如何在表单中使用复选框并控制输入字段

Posted

技术标签:

【中文标题】如何在表单中使用复选框并控制输入字段【英文标题】:How to use check box in forms and control the input fields 【发布时间】:2021-12-26 13:29:16 【问题描述】:

我有一个表单,我从solutestate 获取数据,输出使用value=solutestate 发送到第一个输入框,但我想使用输入框中的复选框切换输出

目标:当我选中复选框时,solutestate 的值应该在第一个输入框中,如果未选中,solutestate 的输出应该在第二个输入框中。

const [state, setState] = useState(false);
const [solutestate, setSoluteState] = useState();
  <input
      className="mr-2 leading-tight"
      type="checkbox"
      onChange=setState
  />
  <form
      noValidate
      onSubmit=handleSubmit(onSubmit)
      className="space-x-4"
  >
      <input
         className="shadow"
         ...register("solute")
         placeholder="SOLUTE"
         onChange=(e) => setSoluteState(e.target.value)
         value=solutestate
      />
      <input
         className="shadow"
         ...register("solvent")
         placeholder="SOLVENT"
      />
  </form>

【问题讨论】:

【参考方案1】:

试试下面的例子。最初,由于复选框未选中,值将在第二个输入中。

const [solutestate, setSoluteState] = useState("");
const [input1, setInput1] = useState("");
const [input2, setInput2] = useState("");
const [syncToFirst, setSyncToFirst] = useState();
<input
  className="mr-2 leading-tight"
  type="checkbox"
  onChange=(event)=>syncToFirst(event.target.checked?1:2)
/>
<form
  noValidate
  onSubmit=handleSubmit(onSubmit)
  className="space-x-4"
>
  <input
     className="shadow"
     ...register("solute")
     placeholder="SOLUTE"
     onChange=(e) => syncToFirst === 1 ? setSoluteState(e.target.value) : setInput1(e.target.value)
     value=syncToFirst === 1 ? solutestate : input1
  />
  <input
     className="shadow"
     ...register("solvent")
     placeholder="SOLVENT"
     onChange=(e) => syncToFirst === 2 ? setSoluteState(e.target.value) :input2(e.target.value)
     value=syncToFirst === 2 ? solutestate : input2
  />

【讨论】:

我在另一个输入字段中得到了错误,并且当我取消选中这些值时,状态值正在交换,而另一个为错误。我已附上图片供您在问题中参考 让我纠正我的例子 现在可以查看了吗? 输入字段中的 false 消失了,但是当我选中复选框时,状态值正在转移到另一个输入框,而不是采用新值 我附上了图片,您可以检查发生了什么。该值不会保留在输入框中,而是在移动【参考方案2】:
Try the code below. This should work
    const [solutestate, setSoluteState] = useState("");
    const [input2, setInput2] = useState("");
    <input
      className="mr-2 leading-tight"
      type="checkbox"
      onChange=(event)=>event.target.checked && setInput2(solutestate)
    />
    <form
      noValidate
      onSubmit=handleSubmit(onSubmit)
      className="space-x-4"
    >
      <input
         className="shadow"
         ...register("solute")
         placeholder="SOLUTE"
         onChange=(e) => setSoluteState(e.target.value)
         value=solutestate
      />
      <input
         className="shadow"
         ...register("solvent")
         placeholder="SOLVENT"
         onChange=(e) => input2(e.target.value)
         value=input2
      />

【讨论】:

以上是关于如何在表单中使用复选框并控制输入字段的主要内容,如果未能解决你的问题,请参考以下文章

当我将表单提交到服务器时,如何检查表单中是不是存在输入字段?

如何根据复选框输入启用django表单字段?

颤振:如何在登录表单中自动填写密码

如何在 Angular2 中触发表单验证器

表单未发布所有选中的输入复选框

高级表单验证 - 如何在用户完成后在字段旁边添加复选标记? --Javascript [关闭]