console
var shopItems = [];
shopItems = [{
id: 1,
price: 100,
rebate: 1,
num: 1,
reduce: 0,
max_num: 1,
selected: true,
img: 'http://img5.mtime.cn/mg/2016/09/22/094949.91079705.jpg',
title: '标题1'
},
{
id: 2,
price: 80,
rebate: 0.9,
num: 2,
max_num: 5,
reduce: 10,
selected: true,
img: 'http://img5.mtime.cn/mg/2016/09/22/094949.91079705.jpg',
title: '标题2'
},
{
id: 3,
price: 50,
rebate: 0.8,
num: 3,
max_num: 10,
selected: false,
reduce: 0,
img: 'http://img5.mtime.cn/mg/2016/09/22/094949.91079705.jpg',
title: '标题3'
},
]
var str = '';
shopItems.map(item => {
str += [
'<div class="item" aid="'+item.id+'">',
'<input type="checkbox" class="select_box">',
'<img class="item_img" src="'+item.img+'">',
'<span class="title">'+item.title+'</span>',
'<span class="price">¥'+item.price+'</span>',
'<div class="num"><span class="less">-</span>',
'<input type="text" class="num_input" value="'+item.num+'">',
'<span class="more">+</span>',
'</div>',
'<span class="total">¥0</span>',
'<div class="opt">',
'<div class="del">删除</div>',
'<div class="move">移入收藏夹</div>',
'</div>',
'</div>'].join('')
})
$('.list').html(str)
$('.list').on('click', '.more', function(){
var parent = $(this).parents('.item');
var input = parent.find('.num_input');
var val = input.val();
var aid = parent.attr('aid');
var item_obj = shopItems.filter(item=>item.id == aid)[0];
if(val*1 < item_obj.max_num ){
item_obj.num++;
input.val(item_obj.num);
calc_price(aid);
}else{
alert('超过库存上限')
}
})
$('.list').on('click', '.less', function(){
var parent = $(this).parents('.item');
var input = parent.find('.num_input');
var aid = parent.attr('aid');
var item_obj = shopItems.filter(item=>item.id == aid)[0];
if(item_obj.num > 0 ){
item_obj.num--;
input.val(item_obj.num);
calc_price(aid);
}else{
alert('超过库存上限')
}
})
$('.list').on('change', '.num_input', function(){
var parent = $(this).parents('.item');
var aid = parent.attr('aid');
var input = parent.find('.num_input');
var val = $(this).val();
var item_obj = shopItems.filter(item=>item.id == aid)[0];
if(val*1 > item_obj.max_num){
alert('超过库存上限')
input.val(item_obj.max_num)
item_obj.num = item_obj.max_num
}else{
item_obj.num = val*1;
}
calc_price(aid);
})
$('.list').on('change', '.select_box', function(){
var parent = $(this).parents('.item');
var aid = parent.attr('aid');
var item_obj = shopItems.filter(item=>item.id == aid)[0];
item_obj.selected = $(this).prop('checked')
if(!item_obj.selected){
$('.selected_all input').prop('checked', false)
}
var all_flag = true;
shopItems.forEach(item=>{
if(all_flag && !item.selected){
all_flag = false;
}
})
if(all_flag){
$('.selected_all input').prop('checked', true)
}
calc_price(aid)
})
$('.selected_all input').change(function(){
var status = $(this).prop('checked');
$('.select_box').prop('checked',status);
shopItems.forEach(item=>{
item.selected = status;
calc_price(item.id)
})
})
$('.list').on('click', '.del', function(){
var parent = $(this).parents('.item');
var aid = parent.attr('aid');
parent.remove();
var arr = shopItems.filter(item=> item.id != aid);
shopItems = arr;
shopItems.forEach(item=>{
calc_price(item.id)
})
})
function calc_price(aid){
var total = 0;
var reduce_num = 0;
shopItems.forEach(item=>{
var tmp = (item.price - item.reduce) *item.num* item.rebate;
var tmp_reduce =item.price * item.num - tmp;
if(item.id == aid){
var item_dom = $('.item[aid="'+aid+'"]');
item_dom.find('.total').html('¥'+tmp);
}
if(item.selected){
total += tmp;
reduce_num = tmp_reduce;
}
})
$('.main_price span').html('¥'+total);
$('.main_reduce span').html('¥'+reduce_num);
}
shopItems.forEach(item=>{
calc_price(item.id);
if(item.selected){
$('.item[aid="'+item.id+'"]').find('.select_box').attr('checked', true)
}
})
<div class="list"></div>
<div class="selected_all">全选: <input type="checkbox"> </div>
<div class="main_price">总价:<span>0</span></div>
<div class="main_reduce">促销减价:<span>0</span></div>
.list {
width: 100%;
}
.item {
display: flex;
align-items: center;
margin: 10px 0;
}
.select_box {
display: block;
}
.item_img {
width: 100px;
height: 80px;
object-fit: cover;
margin: 0 10px;
}
.title {
flex: 1;
margin: 0 10px;
}
.price {
margin: 0 10px;
}
.num {
width: 100px;
display: flex;
margin: 0 10px;
align-items: center
}
.num input {
flex: 1;
display: block;
width: 50px;
}
.num span {
display:block;
border: 1px solid red;
width: 20px;
height: 20px;
cursor:pointer;
text-align: center;
}
.total {
margin: 0 10px;
}
.opt {
margin: 0 10px;
display: flex;
flex-direction: column;
}