java循环购物车结算系统,购物车js代码_JS实现购物车商品列表结算功能代码

ea34d045f5666f572ed2a08d43bfa3c930140.png%20

最近更新于 4年前

js代码

window.onload = function () {

if (!document.getElementsByClassName) {

document.getElementsByClassName = function (cls) {

var ret = [];

var els = document.getElementsByTagName('*');

for (var i = 0, len = els.length; i < len; i++) {

if (els[i].className.indexOf(cls + ' ') >=0 || els[i].className.indexOf(' ' + cls + ' ') >=0 || els[i].className.indexOf(' ' + cls) >=0) {

ret.push(els[i]);

}

}

return ret;

}

}

var table = document.getElementById('cartTable'); // 购物车表格

var selectInputs = document.getElementsByClassName('check'); // 所有勾选框

var checkAllInputs = document.getElementsByClassName('check-all') // 全选框

var tr = table.children[1].rows; //行

var selectedTotal = document.getElementById('selectedTotal'); //已选商品数目容器

var priceTotal = document.getElementById('priceTotal'); //总计

var deleteAll = document.getElementById('deleteAll'); // 删除全部按钮

var selectedViewList = document.getElementById('selectedViewList'); //浮层已选商品列表容器

var selected = document.getElementById('selected'); //已选商品

var foot = document.getElementById('foot');

// 更新总数和总价格,已选浮层

function getTotal() {

var seleted = 0;

var price = 0;

var HTMLstr = '';

for (var i = 0, len = tr.length; i < len; i++) {

if (tr[i].getElementsByTagName('input')[0].checked) {

tr[i].className = 'on';

seleted += parseInt(tr[i].getElementsByTagName('input')[1].value);

price += parseFloat(tr[i].cells[4].innerHTML);

HTMLstr += '

'%20+%20tr%5Bi%5D.getElementsByTagName('img')%5B0%5D.src%20+%20'取消选择'

}

else {

tr[i].className = '';

}

}

selectedTotal.innerHTML = seleted;

priceTotal.innerHTML = price.toFixed(2);

selectedViewList.innerHTML = HTMLstr;

if (seleted == 0) {

foot.className = 'foot';

}

}

// 计算单行价格

function getSubtotal(tr) {

var cells = tr.cells;

var price = cells[2]; //单价

var subtotal = cells[4]; //小计td

var countInput = tr.getElementsByTagName('input')[1]; //数目input

var span = tr.getElementsByTagName('span')[1]; //-号

//写入HTML

subtotal.innerHTML = (parseInt(countInput.value) * parseFloat(price.innerHTML)).toFixed(2);

//如果数目只有一个,把-号去掉

if (countInput.value == 1) {

span.innerHTML = '';

}else{

span.innerHTML = '-';

}

}

// 点击选择框

for(var i = 0; i < selectInputs.length; i++ ){

selectInputs[i].onclick = function () {

if (this.className.indexOf('check-all') >= 0) { //如果是全选,则吧所有的选择框选中

for (var j = 0; j < selectInputs.length; j++) {

selectInputs[j].checked = this.checked;

}

}

if (!this.checked) { //只要有一个未勾选,则取消全选框的选中状态

for (var i = 0; i < checkAllInputs.length; i++) {

checkAllInputs[i].checked = false;

}

}

getTotal();//选完更新总计

}

}

// 显示已选商品弹层

selected.onclick = function () {

if (selectedTotal.innerHTML != 0) {

foot.className = (foot.className == 'foot' ? 'foot show' : 'foot');

}

}

//已选商品弹层中的取消选择按钮

selectedViewList.onclick = function (e) {

var e = e || window.event;

var el = e.srcElement;

if (el.className=='del') {

var input = tr[el.getAttribute('index')].getElementsByTagName('input')[0]

input.checked = false;

input.onclick();

}

}

//为每行元素添加事件

for (var i = 0; i < tr.length; i++) {

//将点击事件绑定到tr元素

tr[i].onclick = function (e) {

var e = e || window.event;

var el = e.target || e.srcElement; //通过事件对象的target属性获取触发元素

var cls = el.className; //触发元素的class

var countInout = this.getElementsByTagName('input')[1]; // 数目input

var value = parseInt(countInout.value); //数目

//通过判断触发元素的class确定用户点击了哪个元素

switch (cls) {

case 'add': //点击了加号

countInout.value = value + 1;

getSubtotal(this);

break;

case 'reduce': //点击了减号

if (value > 1) {

countInout.value = value - 1;

getSubtotal(this);

}

break;

case 'delete': //点击了删除

var conf = confirm('确定删除此商品吗?');

if (conf) {

this.parentNode.removeChild(this);

}

break;

}

getTotal();

}

// 给数目输入框绑定keyup事件

tr[i].getElementsByTagName('input')[1].onkeyup = function () {

var val = parseInt(this.value);

if (isNaN(val) || val <= 0) {

val = 1;

}

if (this.value != val) {

this.value = val;

}

getSubtotal(this.parentNode.parentNode); //更新小计

getTotal(); //更新总数

}

}

// 点击全部删除

deleteAll.onclick = function () {

if (selectedTotal.innerHTML != 0) {

var con = confirm('确定删除所选商品吗?'); //弹出确认框

if (con) {

for (var i = 0; i < tr.length; i++) {

// 如果被选中,就删除相应的行

if (tr[i].getElementsByTagName('input')[0].checked) {

tr[i].parentNode.removeChild(tr[i]); // 删除相应节点

i--; //回退下标位置

}

}

}

} else {

alert('请选择商品!');

}

getTotal(); //更新总数

}

// 默认全选

checkAllInputs[0].checked = true;

checkAllInputs[0].onclick();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值