【问题标题】:Why are unchecked checkboxses ignored when posting a form?为什么在发布表单时会忽略未选中的复选框?
【发布时间】:2020-12-18 18:58:52
【问题描述】:

我有一个表格,客户可以填写一些信息。它还有一些后端处理的复选框。当我将复选框提交为未选中时,我注意到它甚至没有随帖子一起发送,因此当后端处理表单值时,复选框的名称不存在且未定义。

我的问题是,如果表单未选中,为什么在发布表单时会忽略复选框?我该如何解决它,以便在发布表单时发送 true 或 false 作为值,具体取决于复选框是否被选中?

这是我在客户端的表单中的一个示例:

<form method="POST" action="example.com/api/">
    <input type="checkbox" id="example_checkbox" name="example_checkbox" value="false" checked>
    <button class="btn btn-primary" type="submit">Submit</button>
</form>

我还有一些 jquery,它根据客户端是否选中复选框,将 html 中复选框的值设置为 false 或 true:

$('#useRandomPassword').on("change", function() {

    if ($('#useRandomPassword').is(":checked")) {
        $('#useRandomPassword').val(true);
    } else {
        $('#useRandomPassword').val(false);
    }

})

【问题讨论】:

    标签: html forms backend


    【解决方案1】:

    由于 HTML 规范https://www.w3.org/TR/html50/forms.html#constructing-form-data-set,构造表单数据时会跳过未选中的复选框,并且这种情况已经存在很长时间了。

    选项 1:

    当使用Javascript取消选中该字段时,添加一个具有相同名称和虚假值的隐藏字段。

    选项 2:

    添加一个隐藏字段以指定正在提交的复选框字段。在某些情况下,如果复选框不是提交的一部分,您可能希望排除处理,这可能很有用。

    【讨论】:

      【解决方案2】:

      复选框值在未选中时根本不会发送到后端。我不知道这是否有充分的理由,但事实就是如此。

      检查复选框的方法是查看是否返回了某个值。例如,使用 php,您只需:

      isset($_POST['example_checkbox'])
      

      如果复选框发送了一些东西,这将返回 true,否则返回 false。

      如果由于某种原因你不喜欢这个,并且你想在未选中复选框的情况下“欺骗”表单提交值,你可以看看this

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-21
        • 1970-01-01
        • 2013-03-24
        • 2016-05-31
        • 2013-05-21
        • 1970-01-01
        相关资源
        最近更新 更多