【问题标题】:selecting html checkbox based on json array values根据json数组值选择html复选框
【发布时间】:2015-11-25 06:34:34
【问题描述】:

我有表单,我将多个复选框项目作为数组发送到控制器,

<?php
    foreach($groupsArray as $group)
        {
?>
<label>
<input type="checkbox" class="icheck" name="groups[]" id="groups" value="<?php echo $group["id"];?>"> <?php echo $group['name']?> </label>

<?php
}
?>

数据库中的复选框值更新一切正常,

现在,我正在做的是,从数据库中获取值,我需要检查存储在数据库中的值,

我得到低于 PHP 的 json 响应

groups: [{user_id: "2", group_id: "4", id: "4", name: "system Creators",…}]

下面我用作AJAX

if(objData.groups[0].group_id == $("#groups").val())
    {
        $("#groups").iCheck('check');
    }

有了这个$("#groups").val(),它总是取第一个复选框的值,所以有问题, 如何将所有复选框的值与 Json 进行比较? 另外,如果groups数组会有多个值,意味着多维数组,那么更多的groups呢?

提前致谢!

【问题讨论】:

    标签: javascript php jquery arrays json


    【解决方案1】:

    您需要能够知道哪个checkbox 与哪个database value 相关。

    这就是IDcheckbox 上的用途。您将它们都设为"groups" - 这是不好的做法。

    使用:(注意动态id属性)

    <?php
        foreach($groupsArray as $group)
            {
    ?>
    <label>
    <input type="checkbox" class="icheck" name="groups[]" id="chk<?php echo $group["id"];?>" value="<?php echo $group["id"];?>"> <?php echo $group['name']?> </label>
    
    <?php
    }
    ?>
    

    然后从数据库中循环你的组对象:

    for(var i = 0; i < groups.length; i++) {
       var chk = document.getElementById("chk" + groups[i].id);
       chk.checked = true;
    }
    

    【讨论】:

    • groups.length 的值是多少?它是数组长度吗?,如果是,那么当我只有 2 个数组时,它将如何检查 5 个复选框?
    • 是的,这是您的组数组和长度。如果数据库中只有 2 个项目,为什么要“检查”5 个?如果您的意思是像检查/打勾-您只想打勾数据库中的那些,是吗?如果有 5 个复选框,它只会检查您保存的那些。
    • 嗯,现在似乎工作了。这是典型的 iCheck 插件,它引导我更改 for 循环的最后一行,很好。顺便说一句,动态 id 属性是唯一的吗?我有两对相同类型的复选框值,所以我还需要申请另一对,相同的功能。
    • 所以你是说id $group[id] 不是唯一的?所以你可以有2个相同的ID?如果是这种情况,您需要某种唯一标识符。也许 group_id 和 id 的组合?不完全确定您的意思。
    • 我的意思是我有另一组复选框权限,比如组。而且我还获得了另一个 JSON 权限,所以我需要使用 permissions.length 复制另一个 forloop,所以我想知道这个动态 id 属性的作用是什么?是否可以在另一个for循环中重复使用?
    【解决方案2】:

    试试这个:

    PHP

    <?php
    $count=0;
    foreach($groupsArray as $group)
    {
    ?>
        <label>
        <input type="checkbox" class="icheck" name="groups[]" id="groups<?php echo $count;?>" value="<?php echo $group["id"];?>"> <?php echo $group['name']; ?> </label>
    <?php 
        $count++;
    }
    ?>
    

    jQuery

    for(var i=0;i<objData.gourps.length;i++){
        if(objData.groups[i].group_id == $("#groups"+i).val())
        {
            $("#groups"+i).iCheck('check');
        }
    }
    

    【讨论】:

    • 谢谢,这似乎非常容易和快速接近我的答案,
    • 嗯,不只是检查值存储在数据库中吗?这行不通。
    • 同意@Shaun,我混合了shaun和你的例子,但仍然有问题,首先从i = 0开始,没有groups0,因为数据库中没有group_id = 0,第二个- 如果我在数组中只有 2 个值和 5 个复选框,那么它不会循环 5 次,所以其余 3 个复选框将被跳过!,我仍然有同样的问题!
    • 那么您是否要将所有值存储在数据库中,无论是否选中?
    • 所以不要混合 - 只使用我的 ;) 我不使用循环的索引,也没有触摸你的组 ID。元素 ID 应该始终是唯一的
    【解决方案3】:

    首先,将 groups 复选框的 id 更改为它的类,因此使用 class="groups" 而不是 id="groups",如下所示:

    <label><input type="checkbox" class="icheck" name="groups[]" class="groups" value="<?php echo $group["id"];?>"> <?php echo $group['name']?> </label>
    

    接下来,使用 jQuery .each 方法检查在 JSON 对象中找到的所有复选框,如下所示:

    $.each(objData, function(n, i){
        if(i.group_id == $(".groups[name="+n+"]").val()){
            $(".groups[name="+n+"]").iCheck('check');
        }
    });
    

    【讨论】:

      【解决方案4】:

      终于成功了! 只找到那些来自 DB 的复选框并检查它们。

      for(var i = 0; i < objData.groups.length; i++) 
      {
          $("#groups" + objData.groups[i].group_id).iCheck('check');
      }
      

      感谢大家的支持!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-24
        • 1970-01-01
        • 1970-01-01
        • 2015-12-07
        • 1970-01-01
        • 2016-03-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多