项目的复选框列表的总和
Sum of an checkbox list of items
我有一个项目的复选框列表。我希望每次检查项目时,都能显示项目的价格和增值税,对每个价值(价格和税款)进行小计,并对总成本进行合计。这就是我目前所做的(代码是我在网上找到的脚本的混合):
<html>
<head>
<title>List</title>
<SCRIPT>
function UpdateCost() {
var sum = 0;
var gn, elem;
for (i=1; i<3; i++) {
gn = 'item'+i;
elem = document.getElementById(gn);
if (elem.checked == true) { sum += Number(elem.value);
}
}
document.getElementById('totalcost').value = sum.toFixed(2);
}
</SCRIPT>
</head>
<body>
<FORM >
<table border="1px" align="center">
<tr>
<td>List of Items
<td>Price
<td>Tax
</tr>
<tr>
<td><input type="checkbox" id='item1' value="10.00" onclick="UpdateCost()">item1
<td><INPUT TYPE="text" id='price1' SIZE=5 value="">
<td><INPUT TYPE="text" id='tax1' SIZE=5 value="">
</tr>
<tr>
<td><input type="checkbox" id='item2' value="15.00" onclick="UpdateCost()">item2
<td><INPUT TYPE="text" id='price2' SIZE=5 value="">
<td><INPUT TYPE="text" id='tax2' SIZE=5 value="">
</tr>
<TR>
<TD>Subtotals
<TD><INPUT TYPE="text" id="subtotal1" value="" SIZE=5>
<TD><INPUT TYPE="text" id="subtotal2" value="" SIZE=5>
</TR>
<tr>
<td>Total Cost:
<td><input type="text" id="totalcost" value="" SIZE=5>
<td><input type="reset" value="Reset">
</tr>
</table>
</FORM>
</body>
</html>
下面是一个使用Knockout.js的工作实现。fiddle在这里:http://jsfiddle.net/pJ5Z7/.
ViewModel
和Item
函数定义了您的数据结构和逻辑。视图模型中属性的绑定是在HTML中完成的,Knockout将动态更新这些属性。这是双向的:我留下了价格值作为输入来说明这一点。如果您检查一个项目并更改其价格,您将看到该更改反映在模型和视图的其余部分中(在输入失去焦点后)。
这种方法允许清晰地分离关注点和更易于维护的代码。Knockout和类似库中的声明性绑定也可以帮助您避免手动操作DOM。
如果你想更改数据集,你所要做的就是在初始化代码中添加或删除项目:
var items = [
new Item('item1', 10.00),
new Item('item2', 15.00)
];
使用旧方法,您将不得不更新DOM以及所有逻辑。这些数据甚至可以从web服务或其他任何地方动态加载。
我还清理了一些标记,并将input
元素的大小定义移到了CSS中。在那里定义样式是更好的做法。
如果你想了解更多,只需访问Knockout网站。这里有许多有用的演示和教程。
JavaScript
//Main viewModel
function ViewModel(items) {
var self = this;
self.items = ko.observableArray(items);
self.priceSubtotal = ko.computed(function() {
var i = 0;
var items = self.items();
var sum = 0;
for(i = 0; i < items.length; i++) {
//Only add up selected items
items[i].selected() && (sum += parseFloat(items[i].price()));
}
return sum.toFixed(2);
});
self.taxSubtotal = ko.computed(function() {
var i = 0;
var items = self.items();
var sum = 0;
for(i = 0; i < items.length; i++) {
//Only add up selected items
items[i].selected() && (sum += parseFloat(items[i].taxAmount()));
}
return sum.toFixed(2);
});
self.totalCost = ko.computed(function() {
return (parseFloat(self.priceSubtotal()) + parseFloat(self.taxSubtotal())).toFixed(2);
});
//Functions
self.reset = function() {
var i = 0;
var items = self.items();
var sum = 0;
for(i = 0; i < items.length; i++) {
items[i].selected(false);
}
};
}
//Individual items
function Item(name, price) {
var self = this;
self.name = ko.observable(name);
self.price = ko.observable(price);
self.selected = ko.observable(false);
self.taxRate = ko.observable(0.06);
self.taxAmount = ko.computed(function() {
return (self.price() * self.taxRate()).toFixed(2);
});
}
//Initialization with data- this could come from anywhere
var items = [
new Item('item1', 10.00),
new Item('item2', 15.00)
];
//Apply the bindings
ko.applyBindings(new ViewModel(items));
HTML
<form>
<table border="1px" align="center">
<tr>
<td>List of Items</td>
<td>Price</td>
<td>Tax</td>
</tr>
<!-- ko foreach: items -->
<tr>
<td>
<input type="checkbox" data-bind="checked: selected" />
<span data-bind="text: name"></span>
</td>
<td>
<input type="text" data-bind="value: price"/>
</td>
<td>
<span data-bind="text: selected() ? taxAmount() : ''"></span>
</td>
</tr>
<!-- /ko -->
<tr>
<td>Subtotals</td>
<td>
<span data-bind="text: priceSubtotal"></span>
</td>
<td>
<span data-bind="text: taxSubtotal"></span>
</td>
</tr>
<tr>
<td>Total Cost:</td>
<td>
<span data-bind="text: totalCost"></span>
</td>
<td>
<input type="button" value="Reset" data-bind="click: reset" />
</td>
</tr>
</table>
</form>
相关文章:
- 动态选中文本区域中现有项目的复选框组
- Angularjs - 复选框 - 计算多个选定/未选定项目
- 使用 JQuery 复选框筛选项目列表
- 我正试图获得一个带有复选框的多选下拉列表,在填充项目和获得所有选中的工作时遇到了一些问题
- 如果选择了某个项目,将显示Getting复选框
- 如何使复选框项目返回超链接
- 在复选框取消选中事件中从HTML下拉列表中删除项目
- 购物清单应用程序:使用复选框划掉项目
- 项目的复选框列表的总和
- 使用jQuery从复选框列表中获取所选项目
- 选中RadListView项目模板-客户端中的RadButton复选框
- AngularJs:删除项目后取消选中复选框
- 谁能告诉我如何使用 JavaScript 选择从数据库获取的所有项目到复选框中
- AngularJS指令,用于检查复选框列表中是否至少选中了一个项目
- 在 jQuery 中选中复选框时,如何将项目添加到列表中
- extjs 3.4使用combo store创建复选框组项目
- Extjs使用复选框模型在网格上拖放单个项目
- 如何提交选中的复选框项目
- Ember循环遍历一组复选框并获取选中的项目
- 使用全选验证删除选中的复选框项目