0

我有一个订单表格,我可以通过单击一个按钮来附加字段。我运行了一些后端 javascript 来计算订单价格,但总脚本让我望而却步。

我的问题是我需要脚本来搜索整个 DOM 并找到有多少具有与以下模式匹配的 ID。

totprice01 totprice02 totprice03 totprice(n)

我一直在玩这个正则表达式,但恐怕运气不好:

matchStr = new RegExp("\\btotprice\\d{2}\\b", "gi");

一旦我得到了所有 HTML ID 的数组,我需要将它们传递给一个到目前为止看起来像这样的函数 - 注意它都是硬编码的,而不是最不动态的:

document.getElementById('totpricetot').value = Math.round((parseFloat(document.getElementById('totprice1').value)+parseFloat(document.getElementById('totprice2').value)+parseFloat(document.getElementById('totprice3').value)+parseFloat(document.getElementById('totprice4').value)+parseFloat(document.getElementById('totprice5').value)+parseFloat(document.getElementById('totprice6').value)+parseFloat(document.getElementById('totprice7').value)+parseFloat(document.getElementById('totprice8').value)+parseFloat(document.getElementById('totprice9').value)+parseFloat(document.getElementById('totprice10').value))*100)/100;

有谁能帮我把它放入表达式+函数中,将所有值的总和返回到 中?

非常感谢!

编辑

好的,我决定放弃只使用普通的 ol' javascript - JQuery !我已经使用下面的一些示例将这段代码放在一起,但是有人可以帮我调试它吗?我一直从调试器收到“未定义”错误 - 似乎这个函数对 DOM 的其余部分不可用?

<input id="totprice08" onChange="totChange()" class="total_field" />
<input id="totprice09" onChange="totChange()" class="total_field" />
<input id="totprice10" onChange="totChange()" class="total_field" />
etc...
<input id="totpricetot" value="0.00" name="totpricetot" />

jQuery(function($) {
  function totChange() {
    var sum=0;
    $('.total_field').each(function() {
        sum += $( this ).val () * 1;
    } );
    $('#totpricetot').val(sum);
  }
});
4

6 回答 6

3

我喜欢它是如何通过“使用 jQuery”来回答关于 SO 的每个 javascript 问题的......

无论如何......你也可以用普通的 ol' javascript 来做到这一点:

var inputs = document.getElementsByTagName("input");
var priceInputs = [];
for (var i=0, len=inputs.length; i<len; i++) {
    if (inputs[i].tagName.indexOf("totprice") > -1) {
        priceInputs[priceInputs.length] = parseInt(inputs[i].value);
    }
}
calcTotal(priceInputs);

然后只需创建一个函数来遍历数组并求和(:

于 2009-10-08T12:01:00.377 回答
2

有很多解决方案。除了给所有有问题的元素赋予相同的类名并使用 jQuery(或类似的东西)之外,您还可以简单地记住某个 JavaScript 变量中元素的总数。这有没有可能?我知道 - 这是一种老式的解决方案。您还没有表明您正在使用 jQuery 或任何其他 JavaScript 库,因此它可能更适合您。

编辑:更明确地说:

// your variable, updated every time you add/remove a new field
var fieldsCount; 

// whenever you need to do anything with all the fields:
for (var i = 0; i < fieldsCount; i++)
{
    var field = document.getElementById("totprice" + i);
    // ...
}       
于 2009-10-08T11:56:40.923 回答
1

使用 jQuery,您可以像这样选择和求和元素:

var sum = 0;
$('[id^=totprice-]').each(function()
{
    sum += $(this).val();
});
于 2009-10-08T11:54:38.010 回答
1

给出总结一个类所需的输入,然后通过该类名获取这些输入(jQuery 或其他一些框架在这里会派上用场)。

如果你会使用 jQuery,你可以这样做:

function calculateSum () {
    var sum = 0;
    $( '.YourClass' ).each ( function () {
        sum += $( this ).val () * 1;
    } );

    return sum;
}
于 2009-10-08T11:54:46.777 回答
0

您可以为所有总价格元素赋予相同的 CSS 类,然后获取该类的所有元素(使用 JQuery 既好又容易)。

于 2009-10-08T11:51:42.600 回答
-1

给每个元素一个类并使用 jQuery。

于 2009-10-08T11:54:03.150 回答