【问题标题】:Updating a Javascript money calculator to calculate multiple totals in real-time更新 Javascript 货币计算器以实时计算多个总数
【发布时间】:2012-07-25 08:23:53
【问题描述】:

我在 Yaldex 上找到了以下货币计算器,需要帮助对其进行一些更新。我足智多谋可以编辑现有的 Javascript,但仅此而已。代码如下,一个工作示例可以在这里找到:http://www.yaldex.com/FSCalculators/MoneyCounter.htm

<script language="javascript" type="text/javascript">
/* Visit http://www.yaldex.com/ for full source code
and get more free JavaScript, CSS and DHTML scripts! */
<!-- Begin
function s(num, val) {
amount = num * 1; // amount is the num or NaN
sum = (!num ? 0 : num) * val;  // the sum for that bill or coin

if (isNaN(amount)) { // if the entire is not a number

alert(
"' " + num + " ' is not a valid entry and that field will "
+ "not be included in the total money calculation."
);

return 0;
}
else
return sum; // if it is OK, send sum back
}

function money(form) {
hun = s(form.hun.value, 100); // Each amount is the returned value
fif = s(form.fif.value, 50);  // for the amount in the s() function
twe = s(form.twe.value, 20);
ten = s(form.ten.value, 10);
fiv = s(form.fiv.value, 5);
one = s(form.one.value, 1);
hlf = s(form.hlf.value, .5);
qtr = s(form.qtr.value, .25);
dme = s(form.dme.value, .1);
nck = s(form.nck.value, .05);
pny = s(form.pny.value, .01);

// add up all the amounts
var ttl = hun + fif + twe + ten + fiv
+ one + hlf + qtr + dme + nck + pny;

// rounds total to two decimal places

ttl = "" + ((Math.round(ttl * 100)) / 100);

dec1 = ttl.substring(ttl.length-3, ttl.length-2);
dec2 = ttl.substring(ttl.length-2, ttl.length-1);

if (dec1 != '.') { // adds trailing zeroes if necessary
if (dec2 == '.') ttl += "0";
else ttl += ".00";
}
form.total.value = "$ " + ttl; // display total amount
}
//  End -->
</script>

<form name=coinform>
<table border=1>
<tr>
<td align=center>$ 100</td>
<td align=center>$ 50</td>
<td align=center>$ 20</td>
<td align=center>$ 10</td>
<td align=center>$ 5</td>
<td align=center>$ 1</td>
</tr>
<tr>
<td align=center><input type=text name=hun size=3></td>
<td align=center><input type=text name=fif size=3></td>
<td align=center><input type=text name=twe size=3></td>
<td align=center><input type=text name=ten size=3></td>
<td align=center><input type=text name=fiv size=3></td>
<td align=center><input type=text name=one size=3></td>
</tr>
<tr>
<td colspan=6> </td>
</tr>
<tr>
<td> </td>
<td align=center>50 &cent;</td>
<td align=center>25 &cent;</td>
<td align=center>10 &cent;</td>
<td align=center>5 &cent;</td>
<td align=center>1 &cent;</td>
</tr>
<tr>
<td> </td>
<td align=center><input type=text name=hlf size=3></td>
<td align=center><input type=text name=qtr size=3></td>
<td align=center><input type=text name=dme size=3></td>
<td align=center><input type=text name=nck size=3></td>
<td align=center><input type=text name=pny size=3></td>
</tr>
<tr>
<td colspan=5 align=center>
<input type=button name=calc value="Calculate" onClick="javascript:money(this.form)">
<input type=text name=total size=10>
</td>
</tr>
</table>
</form>

我已经确定如何通过向每个输入字段添加 onkeyup 事件来实时更新总计,但我还想为每个美元/硬币金额添加一个附加字段,以显示总金额用户输入每个数量时的每个单位,并实时更新所有数量的总计。我还希望能够将总计显示为两个金额,即总美元和总美分(例如 100.00 美元 / 10000 美分)。我设想它或多或少是这样的:

$100 x ___ = $___ total
$50 x ___ = $___ total
.
.
.
5¢ x ___ = $___ total
1¢ x ___ = $___ total

GRAND TOTAL $_______ / _______ cents

我们将不胜感激任何和所有的指导和帮助。谢谢!

【问题讨论】:

    标签: javascript real-time calculator


    【解决方案1】:

    Knockout JS 将是实现此类功能的好方法。这是一个可以做什么的快速示例。每个美元金额的数量将是一个可观察的,而总数将是计算的可观察的:

    HTML

    <input type="text" data-bind="value: hundredsQuantity, valueUpdate: 'afterkeydown'" />
    <span id="hundredsResult" data-bind="text: hundredsAmount"></span>
    

    视图模型 (JS)

    return function myViewModel() {
        var self = this;
        self.hundredsQuantity = ko.observable();
        self.hundredsAmount = ko.computed(function () {
            return parseInt(self.hundredsQuantity) * 100;
        });
    };
    

    在这种情况下,数据绑定配置为在用户开始输入字符时立即更新 (afterkeyDown)。

    然后由var vm = new myViewModel(); 创建视图模型,并由ko.applyBindings(vm) 应用绑定。 Knockout 站点上的文档非常好,将提供对此处显示的模式的更多解释。祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-09
      • 2018-11-12
      • 1970-01-01
      • 2016-08-27
      • 2018-01-01
      相关资源
      最近更新 更多