Javascript 使用form.serialize获取正确的复选框值

Javascript 使用form.serialize获取正确的复选框值,javascript,jquery,serialization,Javascript,Jquery,Serialization,我们目前正在使用$('form').serialize()获取所有表单信息 这将返回任何复选框值为“开”或“关” 是否有任何方法可以使用相同的方法获得1/0或真/假值?是。您可以通过添加与复选框同名的隐藏输入来完成此操作,如果复选框未选中,将提交该值: <input type="hidden" name="option" value="false"/> <input type="checkbox" name="option" value="true"/> 如果选中复

我们目前正在使用
$('form').serialize()
获取所有表单信息

这将返回任何复选框值为“开”或“关”


是否有任何方法可以使用相同的方法获得1/0或真/假值?

是。您可以通过添加与复选框同名的隐藏输入来完成此操作,如果复选框未选中,将提交该值:

<input type="hidden" name="option" value="false"/>
<input type="checkbox" name="option" value="true"/>


如果选中复选框,它将提交这两个值。但是服务器端将读取最新的值(复选框的值)

表单控件的值始终是字符串。可以使用单选按钮为同一控件名获取不同的值:

<form ...>
  <input type="radio" name="whatever" value="true">true
  <br>
  <input type="radio" name="whatever" value="false">false
  ...
</form>

真的

假的 ...
只能检查一个,并且只将检查的名称/值发送到服务器。


<input type="checkbox" name="check1" value="true" id="check1">

如果页面中有多个复选框,只需设置值,如:

  <input id="reminder" name="Check1" value="false" type="checkbox" /> 

  <input id="alarm" name="Check2" value="false" type="checkbox" />
默认情况下,复选框值不会出现在$('form').serializeArray()中,而是在选中时出现

我们必须为每个复选框保留一个隐藏字段,如:

<input type="hidden" value="false" name="Check1" />
<input type="hidden" value="false" name="Check2" />

现在,当我们现在序列化表单时,会得到正确的值,如: Check1=true
Check2=false

您可以为复选框添加新类,并在单击时设置值

<input class="checkbox" id="someId" type="checkbox" value="false" />Checkbox

然后,您将能够获取复选框的值或序列化表单。

如果您有许多复选框,此方法可能会变得笨拙。这里有一个更好的方法:绝对不同意你的观点@KarthicRaghupathi。如果带有不透明逻辑的多行自定义JS看起来“更有用”,那就试试吧。最初的问题是关于二进制值,而不是多重值。对我来说,两行html代码是一个更优雅的解决方案。另一种方法也适用于二进制值。只有它处理表单中的所有复选框。我必须在一张表格中处理20个复选框。你的方法意味着40个输入标签,而不是几行JS。如果你在页面上有20个复选框,你就有另一个问题了,伙计-它的UX接近于0。想想看,像EMRs/EHR这样的应用程序有很多复选框的大表单。它可能并不一定意味着糟糕的用户体验。如果我们选中/取消选中复选框,并且需要更多的js才能工作,它就不会得到更新
<input class="checkbox" id="someId" type="checkbox" value="false" />Checkbox
$('.checkbox').click(function () {
    $(this).val() == "false" ? $(this).val("true") : $(this).val("false");
});