【问题标题】:jQuery enumerate dynamic tablejQuery枚举动态表
【发布时间】:2011-01-20 06:34:57
【问题描述】:

我有一个模仿发票输入表单的 HTML 表单。

这是我加载发票项目的方式(用户使用 jQuery 通过自动完成列表选择它们):

    $(document).ready(function() {
        $("#Products").focus().autocomplete('<%=Url.Action("GetProducts", "Product") %>', {
            dataType: 'json',
            parse: function(data) {
                var rows = new Array();
                for (var i = 0; i < data.length; i++) {
                    rows[i] = { data: data[i], value: data[i].product_name1, result: data[i].product_name1 };
                }
                return rows;
            },

            formatItem: function(row, i, n) {
                return row.product_PrettyId + ' - ' + row.product_name1 + ' (' + row.product_price + ' €) ';
            },
            width: 900,
            minChars: 0,
            max: 0,
            mustMatch: true
        });

        $("#Products").result(function(event, data, formatted) {
            if (data) {
                $(this).parent().next().find("input").val(data["product_id"]);
                $("#InvoiceItems > tbody").append(
                    "<tr>" +
                    "<td>num</td>" +
                    "<td>" + data["product_PrettyId"] + "</td>" +
                    "<td>" + data["product_name1"] + "</td>" +
                    "<td>" + data["product_price"] + "</td>" +
                    "<td></td>" +
                    "<td>1</td>" +
                    "<td>" + data["product_price"] + "</td>" +
                    "</tr>");
            }
        });

添加每个发票项目后,我需要枚举我正在构建的表格 - 计算项目数量,将价格乘以数量,然后对所有项目求和。

我该怎么做?

【问题讨论】:

  • 您能否提供一个简化示例,说明您已经拥有的东西,如果可能的话,说明您想要实现的目标?

标签: jquery asp.net-mvc


【解决方案1】:

您可能希望为特定的 td 添加一些类,例如数量、价格和商品总数,每次添加新类时,您都可以更新计数器并将其存储在隐藏字段中并从那个值

编辑:在函数中包装 .each 循环

function functionName() {
var itemCounter = 0;
$('#InvoiceItems tr').each(function() {
    itemCounter += 1;
    //this loops through each row in the table
    var quantity = parseFloat($('td.quantity', this).text());
    quantity = isNaN(quantity) ? 1 : quantity;//if a number isn't parsed, replace it with 1
    var price = parseFloat($('td.price', this).text());
    price = isNaN(price) ? 0 : price;
    var total = quantity * price;
    //do something with the total
});
}

您可以在添加新项目时调用此函数,以便总数始终是最新的

【讨论】:

  • 您的代码看起来不错,但我遇到了问题。带有 val() 的行返回“未定义”,因此总数为 NaN。有什么问题?
  • 您还可以对输入添加验证检查以确保值是数字
  • 嘿,谢谢,但是值在那里并且 parseFloat 仍然返回 NaN。实际上问题出在 find() - 它没有找到任何东西。我尝试只输出该值,但它是未定义的。我有指定的课程。似乎 each() 正在工作,它确实找到了添加的行,但 find() 没有找到 s
  • 嘿,你猜怎么着,我不得不用 html() 替换 val()。这样会好吗?编辑:不, .html() 不起作用,因为它会拾取单元格中包含的整个 html 标记。但它确实捡起了它,不像 val(),它有一些问题??
  • 我使用 val() 假设单元格是输入,如果不是这种情况,您可以使用 .text() 方法获取元素中的文本,我更新了代码以替换.find() 方法,试一试
猜你喜欢
相关资源
最近更新 更多
热门标签