整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

javascript实现简单购物车功能(有图)

javascript实现简单购物车功能(有图)

s实现淘宝购物车类似功能:

主要有添加商品

增加和减少商品数量

根据增加、减少或选择的商品获取金额

实现商品价格的计算

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>购物车</title>

</head>

<style type="text/css">

h1{

text-align: center;

}

table{

margin: 0 auto;

}

body{

font-size: larger;color: crimson;

background-image: url(img/2.jpg);

background-repeat: no-repeat;

background-size: 100%;

}

table th,table td{

}

</style>

<body >

<h1>购物车:真划算</h1>

<table border="1" >

<tr>

<!--文本th-->

<th>商品</th>

<th >单价</th>

<th>颜色</th>

<th>库存</th>

<th>好评率</th>

<th>操作</th>

</tr>

<tr>

<td>面膜</td>

<td >150</td>

<td>白色</td>

<td>100</td>

<td>88%</td>

<td align="center">

<input type="button" value="加入购物车" onclick="add_shoppingcar(this)"/>

</td>

</tr>

<tr>

<td>口红</td>

<td >350</td>

<td>白色</td>

<td>166</td>

<td>82%</td>

<td align="center">

<input type="button" value="加入购物车" onclick="add_shoppingcar(this)"/>

</td>

</tr>

<tr>

<td>鼠标</td>

<td >150</td>

<td>黑色</td>

<td>99</td>

<td>75%</td>

<td align="center">

<input type="button" value="加入购物车" onclick="add_shoppingcar(this)"/>

</td>

</tr>

<tr>

<td>键盘</td>

<td >120</td>

<td>黑色</td>

<td>50</td>

<td>80%</td>

<td align="center">

<input type="button" value="加入购物车" onclick="add_shoppingcar(this)"/>

</td>

</tr>

</table>

<h1> 购物车</h1>

<table border="1">

<thead>

<tr>

<th>商品</th>

<th >单价</th>

<th>数量</th>

<th>金额</th>

<th>删除</th>

</tr>

</thead>

<tbody id="goods">

<!--<tr>

<td>面膜</td>

<td>150</td>

<td align="center">

<input type="button" value="-" id="jian" onclick="change(this,-1);"/>-->

<!--readonly规定输入字段为只读-->

<!--<input id="text" type="text" size="1" value="1" readonly="readonly" />

<input type="button" value="+" id="add" onclick="change(this,1);"/>

</td>

<td> <input id="money" size="1" value="80"></input></td>

<td align="center">

<input type="button" value="X" onclick="del(this)" />

</td>

</tr>-->

</tbody>

<tfoot>

<tr>

<td colspan="3" align="center" >总计</td>

<td id="total"></td>

<td>元</td>

</tr>

</tfoot>

</table>

</body>

<script type="text/javascript">

//this js中指当前对象

function add_shoppingcar(btn){

var tr=btn.parentNode.parentNode;

var tds=tr.getElementsByTagName("td");

var name=tds[0].innerHTML;

var price=tds[1].innerHTML;

var tbody=document.getElementById("goods");

var row=tbody.insertRow();//insertRow表格开头插入新行

row.innerHTML="<td>"+name+"</td>"+

"<td>"+price+"</td>"+

"<td align='center'>"+

"<input type='button' value='-' id='jian' onclick='change(this,-1)' />"+

"<input id='text' type='text' size='1' value='1' readonly='readonly' />"+

"<input type='button' value='+' id='add' onclick='change(this,1)' />"+

"</td>"+

"<td>"+price+"</td>"+

"<td align='center'>"+

"<input type='button' value='X' onclick='del(this)'/>"+

"</td>"+

"</tr>"

total();

}

//增加减少数量,用n正负1来表示点击了加减按钮

function change(btn,n){

//获取数量的三个input对象

var inputs=btn.parentNode.getElementsByTagName("input");

//获取原来的数量

var amount=parseInt(inputs[1].value);

//当amount=1时不能再点击"-"符号

//用n<0来表示点击了减button

if(amount<=1 && n<0){

return;

}

//根据加减来改变数量

inputs[1].value=amount + n;

  • //将改变后的数量值赋值给am

  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186

实现效果:

近一直忙于公司的一个新的h5项目,项目中有一个购物车模块,使用jquery实现购物车基本结算功能。现已整理出来,感兴趣的小伙伴们可以参考一下。

基本实现了单选、全选、购物车数量联动、价格动态汇总、删除订单及无数据提示

购物车列表模板

实际项目中需要根据购物车商品数据动态渲染,这里就使用静态html展示了。

<!-- 购物车列表 -->
<div class="cart-wrap__ls" id="J__CartLS">
	<div class="cart-ls__item">
		<!-- //复选框 -->
		<div class="cart-item__radio"><i class="ico-radio"></i></div>
		<!-- //商品信息 -->
		<div class="cart-item__ginfo">
			<img class="g-img" src="http://admin.weikeniu.com/img/28291/20170721151143_4752_b.jpg" />
			<div class="g-info">
				<div class="flex1">
					<div class="g-title clamp1">海陵岛大角湾风景区2天1晚</div>
					<div class="g-subtit clamp1">给你不一样的风景体验</div>
				</div>
				<div class="g-price c-red fs-32">¥<em>199.00</em></div>
			</div>
		</div>
		<!-- //数量加减 -->
		<div class="cart-item__num">
			<span class="minus disabled" onClick="$.cartNum.set(-1, this);">-</span>
			<input type="tel" value="1" onBlur="$.cartNum.check(this);" />
			<span class="plus normal" onClick="$.cartNum.set(+1, this);">+</span>
		</div>
		<!-- //删除 -->
		<img class="cart-item__del" src="img/icon_cart-del.png" />
	</div>
	<!-- ... -->
</div>

购物车底部固定模板

<!-- 购物车底部 -->
<div class="cart-wrap__bottomAction" style="padding-top:2rem;">
	<div class="bottomfixed">
		<div class="inner">
			<div class="chkAll flex1" id="J__chkAll">
				<i class="ico-radio"></i>
				<span>全选</span>
			</div>
			<div class="total rmr-24">合计:<span class="c-red fs-32">¥<em id="J__totalPrice">12232.00</em></span></div>
			<button class="gstyle-btn__primary btn-pay" id="J__goPay">结算 (<em id="J__selNum">12</em>)</button>
		</div>
	</div>
</div>

购物车数量

直接封装成$.cartNum函数,通过 $.cartNum.set()$.cartNum.check(this) 调用即可。

<div class="cart-item__num">
	<span class="minus disabled" onClick="$.cartNum.set(-1, this);">-</span>
	<input type="tel" value="1" onBlur="$.cartNum.check(this);" />
	<span class="plus normal" onClick="$.cartNum.set(+1, this);">+</span>
</div>

$(function(){
	// 购物车数量
	$.cartNum={
		set: function(code, obj){
			var ipt=$(obj).siblings("input");
			var cartNums=parseInt($.trim(ipt.val()));
			switch (code) {
				case 1: {
					cartNums++;
				}
				break;
				case -1: {
					cartNums--;
				}
				break;
			}
			ipt.val(cartNums);
			$.cartNum.check(ipt);
			getTotalPrice();
		},
		check: function(obj){
			var o=$(obj);
			//数量小于0
			var cartNums=parseInt($.trim(o.val()));
			if (cartNums <=1) {
				o.val(1);
				o.siblings('.minus').addClass('disabled');
			}else {
				o.siblings('.minus').removeClass('disabled');
			}

			//判断数量是否是数字
			var regExp=/^[1-9]*[1-9][0-9]*$/;
			if (isNaN(cartNums) || !regExp.test($.trim(o.val()))) {
				o.val(1);
				o.siblings('.minus').addClass('disabled');
			}

			//数量大于库存(假定库存99)
			//var storeNums=parseInt($.trim($('#data_storeNums').text()));
			var storeNums=99;
			if (cartNums >=storeNums) {
				o.val(storeNums);
			}
			getTotalPrice();
		}
	};
});

绑定单选、全选

// 判断是否全选
chkAll();
function chkAll() {
	var $radio=$('#J__CartLS .cart-item__radio');
	var num=$radio.size();
	var k=0;
	$radio.each(function(i, v) {
		if($(this).hasClass('on')) {
			k++;
		}
	});
	if(k==num) {
		$('#J__chkAll').addClass('on');
	} else {
		$('#J__chkAll').removeClass('on');
	}
}
// 绑定单选
$('body').on('click', '#J__CartLS .cart-item__radio', function() {
	$(this).toggleClass('on');
	chkAll();
	getTotalPrice();
});
// 绑定全选
$('body').on('click', '#J__chkAll', function() {
	if($(this).hasClass('on')) {
		$('#J__CartLS .cart-item__radio').removeClass('on');
	} else {
		$('#J__CartLS .cart-item__radio').addClass('on');
	}
	$(this).toggleClass('on');
	getTotalPrice();
});

价格汇总

点击单选、全选及数量加减,都触发 getTotalPrice 函数。

// 价格汇总
getTotalPrice();
function getTotalPrice() {
	var $cartls=$('#J__CartLS').find('.cart-ls__item');
	var total=0, selected=0;
	$cartls.each(function(i, v) {
		if($(v).find('.cart-item__num input').val() > 1) {
			$(v).find('.cart-item__num .minus').removeClass('disabled'); //数量大于1减号可点击
		}
		if($(v).children('.cart-item__radio').hasClass('on')) {
			var num=$(v).find('.cart-item__num input').val(); //商品数量
			total +=parseFloat($(v).find('.g-price em').text() * num);
			selected++;
		}
	});
	$('#J__goPay').prop('disabled', selected < 1 ? true : false);
	$('#J__totalPrice').text(total.toFixed(2));
	$('#J__selNum').text(selected);
}

删除订单

删除订单后,移除该订单,触发 getTotalPrice 函数,当购物车为空,则提示无数据。

// 删除订单
$('#J__CartLS').on('click', '.cart-item__del', function() {
	var that=$(this);
	wcPop({
		skin: 'ios',
		style: 'border-radius:12px;font-family:arial;overflow:hidden;',
		content: '您确定要删除该条订单吗?',
		btns: [
			{
				text: '取消', style: 'color:#797979',
				onTap() { wcPop.close(); }
			},
			{
				text: '确定', style: 'color:#e0201f',
				onTap() {
					that.parents('.cart-ls__item').remove();
					wcPop.close();
					getTotalPrice();
					if($('#J__CartLS .cart-ls__item').size() > 0) {
						$('.J__bmBadge').text($('#J__CartLS .cart-ls__item').size());
					}else {
						$('.J__bmBadge').remove();
						$('.cart-nodata').fadeIn();
					}
				}
			}
		]
	})
});

ok,以上就是基于jquery实现的购物车功能。希望对大家有所帮助,感兴趣的可以参考一下。

如果大家有更优的方法,欢迎一起交流讨论哈~~

着电子商务网站和在线购物网站的日益普及,开发人员往往需要设计购物车功能。在本文中,我们将为大家展示一些免费并且流行的jQuery购物车插件,你可以下载它们来简化工作流程。

该插件非常智能,它能通过非入侵的方式使用户跳转到想要购买的产品列表中,无需刷新页面或触发弹出窗口。

jPayPalCart是一个简单的集成jQuery插件,它允许您创建一个无需使用笨重服务器端刷新页面的功能齐全的购物车。

Simple Cart是一个免费开源的JavaScript购物车,可以轻松地与网站集成。

AddUI Store是一个易于使用的jQuery插件,它可以在任何网站上快速增加一个功能齐全的商店。这个插件由纯JavaScript(jQuery)写成。

jQuery Cart能实现拖放功能,能更新购物车来反应添加到其中的新项目,同时会更新数量。

Ajax和jQuery shopping carts是实现网站购物车最好的方式之一。

AJAX PayPal Cart是一个易于使用的jQuery插件,Web开发人员可以使用它在网站上添加一个全功能的购物车。

Ajax Shopping Cart可以以Ajax的方式修改购物车里的商品数量。

本站文章除注明转载外,均为本站原创或翻译