取消选中时,复选框返回false

Gur*_*rgy 6 html php checkbox

我的表格看起来像:

<form>
    <input type"checkbox" name="checked[(unique_id)]">
    <input type"checkbox" name="checked[(unique_id)]">
    <input type"checkbox" name="checked[(unique_id)]">
    <input type"checkbox" name="checked[(unique_id)]">
</form>
Run Code Online (Sandbox Code Playgroud)

复选框的数量会不时变化,因此在使用PHP处理此数据时,我必须循环_POST['checked']数组.

我的问题是,我想在选中复选框时以及不选中时执行操作.但只有选中的复选框才会添加到_POST['checked']数组中.

Rob*_*ert 4

<form>
    <input type="checkbox" key="1"/>
    <input type="hidden" name="checked[1]" value="false">
    <input type="checkbox" key="2"/>
    <input type="hidden" name="checked[2]" value="false">
    <input type="checkbox" key="3"/>
    <input type="hidden" name="checked[3]" value="false">
    <input type="checkbox" key="4"/>
    <input type="hidden" name="checked[4]" value="false">
</form>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
    $(document).ready(function () {
        $('[key]').change(function () {
            var key = $(this).attr('key');
            $($('[name="checked[' + key + ']"]')).val($(this).is(':checked') ? 'true' : 'false');
        });
    });
</script>
Run Code Online (Sandbox Code Playgroud)

这就是我正在做的

我使用两个输入,一个是没有名称的复选框,因此它不会发送到 php ,另一个是隐藏的,不会向用户显示,但它将发送到 php

然后使用jquery,当用户选中该框时,jquery 将隐藏输入的值更改为 true,当取消选中时,将值更改为 false

所以该值将始终发送到 php,其值为 true 或 falsestring

您可以通过将其更改为发送 1 和 0 而不是 true 和 false 之类的.is(':checked')?'true':'false') 内容来更改要发送到 php 的值 .is(':checked')?1:0)

另一种解决方案是rybo111解决方案

<input type="hidden" name="check" value="false">
<input type="checkbox" name="check" value="true">
Run Code Online (Sandbox Code Playgroud)

它将发送两个选项,但如果选中该复选框,它将覆盖第一个选项

但它不是 100% 可靠,它会向服务器发送更多数据

阅读有关具有相同名称属性的 POSTing Form Fields的更多信息

因此,如果您想使用没有 js 的简单解决方案,请使用“仅 html”,如果您想要 100% 可靠的解决方案,请使用“js”

  • 另外 `key=""` 不是有效的 HTML。为此,您应该使用 `data-key=""` 和 `$(this).data('key')` 。 (2认同)