1

我有一个带有数字值的表格,它是它的单元格。

我的目标是通过单击表格单元格并获取它们的值,但在我随意单击时将它们相加。它应该跟踪总和并将其显示在单独的div.

我编写了处理单击的代码td并添加了一个类,除其他外,更改背景颜色是必要的,以便用户可以看到他到目前为止所单击的内容。因为类是动态添加的,所以我使用live().

然后我想即时检查td具有新类(称为selecting)并将它们加起来。

这是我到目前为止的代码,但是,首先它不会将它们相加,而是一个接一个地附加,而且顺序也很奇怪:

$(document).ready(function() {
    total = '';

    $('td').click(function() {
        $(this).toggleClass('selecting');
        $('.selecting').live( {
            click: function() {
                if ($('td').hasClass('selecting')) {
                    total += $(this).html();
                }
            }
        })
        $('#feedback').text(total);
    });
})

随后的步骤是,再次td单击被单击的单元格时,总和将减去再次单击的单元格的值。因此,如果新单击,则添加,如果再次单击,则减去,但这就像第二步,对我来说太难了,无法先完成所有操作。

4

2 回答 2

1
total += +$(this).text();

将一个字符串添加到另一个字符串时,您正在连接. 如果要添加,则需要使用数字。将+字符串更改为数字。

此外,更改total = '';total = 0;.

于 2012-12-21T09:43:35.897 回答
0

试试这个:

$('td').click(function() {
    var $td = $(this);
    var total = 0;
    $td.toggleClass('selecting');

    $(".selecting").each(function() {
       total += parseInt($(this).text(), 10);
    });

    $('#feedback span').text(total);
});

示例小提琴

您将在代码中看到,对于每次点击,它都会完全重新计算总数,这消除了在两次点击之间存储总数的需要,以便您可以减去点击的值。它使逻辑更简单。

另外我live()首先删除了,因为live()现在已弃用且不应使用,其次是因为您不需要使用它。

于 2012-12-21T09:49:53.877 回答