0

我在一个表中有一系列输入框,其中包含一些动态生成的行,例如:

<table id="someDataTable">
    <tbody>
        <tr>
            <td >Some Title</td>
            <td >Units</td>
            <td >Val/Unit</td>
            <td >Value</td>
        </tr>
        <tr>
            <td><input type="text" size="30" /></td>
            <td><input type="text" size="14" class="units commas"/></td>
            <td><input type="text" size="14" class="value commas"/></td>
            <td><input type="text" size="14" readonly="readonly" class="autoTotal"/></td>
        </tr>
...
    </tbody>
</table>

现在,我有一个 blur() 调用来添加逗号,每次退出输入框以使用漂亮的Number Formatter插件添加逗号,它只是这样做:

<script>
$(".commas").blur(function () {
     $(this).parseNumber({ format: "#,###", locale: "us" });
     $(this).formatNumber({ format: "#,###", locale: "us" });
});
</script>

而且效果很好。现在,另一方面,我还有一段代码可以在每次击键时自动进行表单数学运算。它在 initialize() 中有一个调用,如下所示:

 $(document).on('keyup', '#someDataTable', DoCalculations);

它调用的函数如下所示:

function DoCalculations() {
    $(this).find('tr').each(function () {
        var tUnits = $(this).find('.units').val();
        var tValue = $(this).find('.value').val();
        $(this).find('.autoTotal').val(Math.round(tUnits * tValue));
    });
}

--

现在,我的问题是:我需要能够去掉逗号来进行计算。我希望能够使用 NumberFormatter 的 parseNumber() 函数来做到这一点,但它的适合度很小。这是 DoCalculations 中尝试完成此操作的替代代码:

function DoCalculations() {

    $(this).find('tr').each(function () {

        var tTotal;
        var tUnits = $(this).find('.units').val();
        var tValue = $(this).find('.value').val();

        tUnits = $.parseNumber(tUnits, { format: "#,###", locale: "us" });
        tValue = $.parseNumber(tValue, { format: "#,###", locale: "us" });

        tTotal = tUnits * tValue;
        tTotal = $.formatNumber(tTotal, { format: "#,###", locale: "us" });

        $(this).find('.autoTotal').val(tTotal);
    });
}

但它在 NumberFormatter.js 中返回运行时错误,它无法获取未定义或空引用的 numberString.indexOf 属性。确切地说是第 442 行。我不确定为什么。我原本以为是因为有空的输入框,但结果并不重要。

归根结底,我需要去掉逗号。

4

1 回答 1

3

删除字符是正则表达式擅长的:

var tValue = parseFloat($(this).find('.value').val().replace(/,/g, ''));

更新

如果val()可以为空/未定义,则可以添加如下检查:

var tValue = $(this).find('.value').val();
tValue = tValue ? parseFloat(tValue.replace(/,/g, '')) : 0;
于 2013-06-14T15:52:50.583 回答