【问题标题】:Get checked and unchecked checkboxes value获取选中和未选中的复选框值
【发布时间】:2023-03-18 03:43:01
【问题描述】:

这是我的脚本:

HTML 代码:

<script>
function pickIt(pId){
    if(document.getElementById(pId).checked==true){
        document.getElementById(pId).checked=false;
    }else{
        document.getElementById(pId).checked = true;
    }
    submitForm();
    return true;
}
</script>
<img src="images/bagua-square.gif" border="0" usemap="#Map2" />
<map name="Map2" id="Map2">
    <area shape="rect" coords="201,14,284,100" onclick="pickIt(1);" />
    <area shape="rect" coords="202,104,284,190" onclick="pickIt(2);" />
    <area shape="rect" coords="202,195,284,283" onclick="pickIt(3);" />
</map>
<div style="display:none;">
    <input type="checkbox" id="1" name="box[]" />
    <input type="checkbox" id="2" name="box[]" />
    <input type="checkbox" id="3" name="box[]" />
</div>

PHP 代码:

<?php
    print_r($_POST['box']);
?>

当我点击 box id 1 pickIt() 功能时,将复选框 1 设置为 on。并且 php 显示 array(0=>'on')

但我也想获取未选中的复选框值,以便 php 显示 数组(0=>'on', 1=>'off', 2=>'off')

实际上我想获取所有复选框的状态 on 和 off 因为我在 mysql db 中使用这些 id 来更新记录状态 on 或关闭。 请指导。

【问题讨论】:

    标签: php javascript mysql html


    【解决方案1】:

    复选框在被选中时发送它们的值,如果没有被选中则根本不发送。

    你应该有:

    <input type="checkbox" id="1" name="box[]" value="1" />
    <input type="checkbox" id="2" name="box[]" value="2"  />
    <input type="checkbox" id="3" name="box[]" value="3"  />
    

    所以值将是 1、2 和 3,而不是 on、on 和 on。然后你可以分辨出哪些是被检查的,因为它们不会都是一样的。

    如果你真的希望你的数据结构是array(0=&gt;'on', 1=&gt;'off', 2=&gt;'off'),那么你可以这样做:

    $foo = array();
    for ($i = 1; $i <= 3; $i++) {
        $foo[$i] = in_array($i, $_GET['box']) ? 'on' : 'off';
    }
    

    【讨论】:

    • 嗯...更近一点。这意味着我必须首先编写两个 sql 查询来更新所有记录状态以触发,然后将状态设置为仅针对数组中的那些行。 :(
    【解决方案2】:

    只有选中的复选框才会发送到服务器(提交表单时),否则不提交

    也变了

    onclick="pickIt('1');" /
    

    【讨论】:

    • 我已经改成 onclick="pickIt('1');"但它仍然显示旧结果。
    • 实际上我想打开和关闭所有复选框,因为我在 mysql db 中使用这些 id 来更新记录状态打开或关闭。请指导。
    【解决方案3】:

    两种选择:

    1. 为每个复选框设置隐藏字段,并在您(取消)选中复选框时使用 javascript 将值设置为 0 或 1。然后忽略 $_POST 中的“on”值。
    2. Php 必须知道有多少(和哪些)复选框,因此缺少的$_POST 值是未选中的框。您可以使用 for 循环来做到这一点。

    【讨论】:

    • “Php 必须知道有多少(和哪些)复选框”——只有当你告诉它时。该信息不在提交的表单数据中。
    • "缺少的 $_POST 值是未选中的框。" — 由于它们都具有相同的值,因此您只能知道丢失了多少,而不是哪些。
    • @Quentin: 1: 是的,但这就是表单缓存如此有用的原因:) 2: 抱歉,我的意思是 $_POST 键。键都不同,是吗?
    • ——除非他们有不同的values,否则不会。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多