2

目前我有两张桌子

我在左上角的复选框上有全选功能,但是单击一个全选会突出显示两个表中的所有复选框,而我只希望在单击的特定“全选”中选中所有框。

此外,当我选择全部并单击方向按钮之一 < 或 > 时,它会很好地拖动所有行,但会拖动标题,如下所示:

我的 JQuery 目前很简单,但我显然错过了一些东西 -

 $('#select-all').click(function (event) {
        if (this.checked) {
            // Iterate each checkbox
            $(':checkbox').each(function () {
                this.checked = true;
            });
        }
        else
        // Iterate each checkbox
            $(':checkbox').each(function () {
                this.checked = false;
            });
    });

其中 'select-all' 是 'tarifs de quittancement' 中全选复选框的 id。

任何帮助表示赞赏

编辑

我的 > 按钮代码的 JQuery 如下:

   $("#move-to-1").on("click", function () {
        var selected = $("#table2").find("input:checked");

        selected.each(function (idx, elem) {
            $(elem).closest("tr").detach().appendTo($("#table1 tbody"));
        });
    });

这可以很好地从一个表移动到另一个表,但我不希望包含全选复选框/表标题的行与其余的行数据一起移动。如何才能做到这一点?

再次感谢。

进一步编辑

现在它已全部排序,除了一个小错误,即选择一个复选框行(不是全选)并将其移动 < 或 > 会导致所有行都被移动。

使用中的 JQuery:

   $('#move-to-1').on('click', function () {
        var selected = $('#table2').find('input:checked');
        selected.each(function (idx, elem) {
            $(elem).closest('tbody').find('tr').detach().appendTo($("#table1 tbody"));
            $('input[type=checkbox]').attr('checked', false);
        });
    });   

   $('#select-all').click(function (event) {
    $(this).closest('table').find(':checkbox').prop('checked', this.checked);
    });
4

3 回答 3

3

您只需要修改当前表中的复选框。由于您没有显示您的标记,因此很难猜测正确的选择器的外观或您是否正在使用表格,但请尝试如下:

$('#select-all').click(function (event) {
    $(this).closest('table').find(':checkbox').prop('checked', this.checked);
});

更新:

为了解决您的第二个问题,假设您已使用正确方法将这些表中的标题与正文分开,您可以调整选择器<thead><tbody>

$('#move-to-1').on('click', function () {
    var selected = $('#table2 tbody').find('input:checked');
    selected.each(function (idx, elem) {
        $(elem).closest('tr').detach().appendTo($("#table1 tbody"));
    });
});
于 2012-09-12T10:19:37.850 回答
1
$('#select-all').click(function (event) {

        // mention the table

        var table = $('selector_to_your_table');

        if (this.checked) {
            // Iterate each checkbox
            table.find(':checkbox').each(function () {
                this.checked = true;
            });
        }
        else
        // Iterate each checkbox
            table.find(':checkbox').each(function () {
                this.checked = false;
            });
    });

笔记

在最新版本的 jQuery:checkbox中已弃用。看这里。.

而不是:checkbox 使用input[type=checkbox].

于 2012-09-12T10:19:18.840 回答
0

代替:

$(':checkbox').each(function () {
  this.checked = true;
});

做:

$('some_sort_of_selector :checkbox').attr('checked', true);

你不需要那个each()循环——jQuery 会自动完成。您需要某种选择器来限制更改哪些复选框。

我注意到你有#select-all- 但你说你有两个全选复选框。你不能那样做。ID 必须是唯一的。

于 2012-09-12T10:20:19.610 回答