【问题标题】:how to loop table row and get the column checkbox如何循环表格行并获取列复选框
【发布时间】:2017-10-02 06:10:26
【问题描述】:

使用 ajax,如何:

  1. 循环遍历每个表格行
  2. 获取相应列的复选框值
  3. 完成循环后,存储在数据库中(请参阅下面的数据库部分)

javascript/jquery

<script type="text/javascript">
    $(document).ready(function() {
        $('#btnUpdPermission').on('click', function(e) {
            var id = '<?php echo $_GET['id'];?>';

            $('#table_perm tbody tr').each(function(){

            });

        });
    });
</script>

HTML

<div class="table-responsive">
    <table class="table table-bordered" id="table_perm">
        <thead>
            <th>Permission</th>
            <th>Read</th>
            <th>Create</th>
            <th>Edit</th>
            <th>Delete</th>
        </thead>
        <tbody>
            <tr>
                <td>Product</td>
                <td><input type="checkbox" class="big-checkbox" name="r[]"/></td></td>
                <td><input type="checkbox" class="big-checkbox" name="c[]"/></td></td>
                <td><input type="checkbox" class="big-checkbox" name="e[]"/></td></td>
                <td><input type="checkbox" class="big-checkbox" name="d[]"/></td></td>
            </tr>
            <tr>
                <td>Invoice</td>
                <td><input type="checkbox" class="big-checkbox" name="r[]"/></td></td>
                <td><input type="checkbox" class="big-checkbox" name="c[]"/></td></td>
                <td><input type="checkbox" class="big-checkbox" name="e[]"/></td></td>
                <td><input type="checkbox" class="big-checkbox" name="d[]"/></td></td>
            </tr>
            <tr>
                <td>Quotation</td>
                <td><input type="checkbox" class="big-checkbox" name="r[]"/></td></td>
                <td><input type="checkbox" class="big-checkbox" name="c[]"/></td></td>
                <td><input type="checkbox" class="big-checkbox" name="e[]"/></td></td>
                <td><input type="checkbox" class="big-checkbox" name="d[]"/></td></td>
            </tr>
            <tr>
                <td>Banking</td>
                <td><input type="checkbox" class="big-checkbox" name="r[]"/></td></td>
                <td><input type="checkbox" class="big-checkbox" name="c[]"/></td></td>
                <td><input type="checkbox" class="big-checkbox" name="e[]"/></td></td>
                <td><input type="checkbox" class="big-checkbox" name="d[]"/></td></td>
            </tr>
        </tbody>
    </table>
</div>

<button type="button" class="btn btn-primary" id="btnUpdPermission">Save</button>

HTML(屏幕截图)

数据库表设计

  1. file_id 是文件主表(授权用户将访问的页面)的外键
  2. user_id 是用户主表的外键(授予此访问权限)
  3. 权利 r=read,c=create,e=edit,d=delete

【问题讨论】:

  • 限制你的问题。
  • 这就是为什么我把积分形式,因为它们密切相关,所以我不会为他们创造更多的问题。

标签: javascript jquery html mysql ajax


【解决方案1】:

1.遍历每个表格行

您应该将.each 方法与children 结合使用。

children 方法获取匹配元素集中每个元素的子元素,可选地由选择器过滤。

$('#table_perm tbody tr').each(function(){
      $(this).children('td').each(function(){

      });
});

2.获取相应列的复选框值

为此,您可以使用find 方法。

$('#table_perm tbody tr').each(function(){
      $(this).children('td').each(function(){
         let checkboxValue = $(this).find('.big-checkbox').val();
      });
});

3.完成循环后,存入数据库

为此,您可以通过 AJAX 发送所有信息来创建一个异步调用,也可以通过从服务器端传递一个操作方法来使用form。

【讨论】:

  • 感谢您的及时回复,我想我在这里遗漏了一些东西。我是否需要将每行复选框名称设置为唯一?如果不是,逻辑如何知道哪些 read 权限授予哪个页面?对吗?
  • @4LeaveCover,您可以从每个页面传递一个二进制数组,例如 [1,0,0,1]。1 表示可以访问,0 没有。
【解决方案2】:

如果我理解得很好,每一行对应一个文件主表的权限,对吧? (在您的数据库中由 file_id 标识)如果是这种情况,首先我会将该 id 放入每个表行(作为 id、作为 data-* 字段等)...

<tr data-id="3">
    <td>Product</td>
    <td><input type="checkbox" class="big-checkbox" name="r[]"/></td>
    <td><input type="checkbox" class="big-checkbox" name="c[]"/></td>
    <td><input type="checkbox" class="big-checkbox" name="e[]"/></td>
    <td><input type="checkbox" class="big-checkbox" name="d[]"/></td>
</tr>
<tr data-id="4">
    <td>Invoice</td>
    <td><input type="checkbox" class="big-checkbox" name="r[]"/></td>
    <td><input type="checkbox" class="big-checkbox" name="c[]"/></td>
    <td><input type="checkbox" class="big-checkbox" name="e[]"/></td>
    <td><input type="checkbox" class="big-checkbox" name="d[]"/></td>
</tr>
...................

然后,考虑到您的表结构,循环您的行并获取所有复选框值,一个选项可能是...

var myPermissions = {};

$('#table_perm tbody tr').each(function() {

    var sectionId = $(this).data('id');
    var sectionPermissions = [];

    $(this).find('input.big-checkbox:checked').each(function() {
        sectionPermissions.push($(this).attr('name').charAt(0));
    });

    myPermissions[sectionId] = sectionPermissions.join(',');

});

所以你终于得到了一个对象myPermissions,它拥有每个部分的所有权限...

{
    3: "r,c",
    4: "r,d",
    5: "c,e,d"
    ....
}

您可以在 ajax 调用中将其作为参数发送。

注意:您的代码中有两条建议...

  1. 您的 html 中有错误,您的 td 结束行两次 (&lt;/td&gt;&lt;/td&gt;)
  2. 如果您打算使用 ajax 而不是使用表单来收集数据,为了避免从字符串名称中获取权限字母,最好为每个复选框分配一个值,指示该权限的字母.我的意思是……

    <td><input type="checkbox" class="big-checkbox" name="r[]" value="r"/></td>
    <td><input type="checkbox" class="big-checkbox" name="c[]" value="c"/></td>
    ..........
    

    ...那么获得价值会更容易和更清洁...

    sectionPermissions.push($(this).val());
    

希望对你有帮助

【讨论】:

  • 感谢您的建议并指出重复的&lt;/td&gt;。请注意:2,我可以删除 name="[]" 吗?这似乎没用,因为我们使用的是value=""
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-14
  • 1970-01-01
  • 2014-10-19
  • 2021-07-26
  • 1970-01-01
  • 2018-08-08
  • 2014-01-12
相关资源
最近更新 更多