jquery特效 商品SKU属性规格选择实时联动
转载,原文链接
功能:各种属性的值选中后,SKU填写表格进行变动,对属性、属性值的数量自适应,编辑时不因去掉勾选导致原有值不显示
所有代码均属原创,现在共享,如果有更好的实现方式,希望互相交流
最终实现效果图

HTML代码
<!--请注意使用了Jquery.iCheck插件(美化选择框)-->
<!--请注意server-id、server-name的设定-->
<div class="row cl">
<label class="form-label col-xs-4 col-sm-2">属性选择:</label>
<div class="formControls col-xs-8 col-sm-10">
<div class="panel panel-default">
<div class="panel-header">属性</div>
<div class="panel-body" id="specList">
<div class="row cl" server-id="1" server-name="内存">
<label class="form-label col-xs-4 col-sm-2">内存:</label>
<div class="formControls col-xs-8 col-sm-10">
<div class="skin-minimal" id="spec_1">
<div class="check-box">
<input type="checkbox" value="1">
<label>无内存</label>
</div>
<div class="check-box">
<input type="checkbox" value="2">
<label>4GB</label>
</div>
<div class="check-box">
<input type="checkbox" value="3">
<label>8GB</label>
</div>
<div class="check-box">
<input type="checkbox" value="4">
<label>16GB</label>
</div>
</div>
</div>
</div>
<div class="row cl" server-id="2" server-name="颜色">
<label class="form-label col-xs-4 col-sm-2">颜色:</label>
<div class="formControls col-xs-8 col-sm-10">
<div class="skin-minimal" id="spec_2">
<div class="check-box">
<input type="checkbox" value="7">
<label>黄色</label>
</div>
<div class="check-box">
<input type="checkbox" value="8">
<label>蓝色</label>
</div>
<div class="check-box">
<input type="checkbox" value="9">
<label>粉色</label>
</div>
<div class="check-box">
<input type="checkbox" value="10">
<label>紫色</label>
</div>
<div class="check-box">
<input type="checkbox" value="11">
<label>银色</label>
</div>
<div class="check-box">
<input type="checkbox" value="12">
<label>蓝色</label>
</div>
<div class="check-box">
<input type="checkbox" value="13">
<label>粉色</label>
</div>
<div class="check-box">
<input type="checkbox" value="14">
<label>紫色</label>
</div>
<div class="check-box">
<input type="checkbox" value="15">
<label>银色</label>
</div>
</div>
</div>
</div>
<div class="row cl" server-id="5" server-name="版本">
<label class="form-label col-xs-4 col-sm-2">版本:</label>
<div class="formControls col-xs-8 col-sm-10">
<div class="skin-minimal" id="spec_5">
<div class="check-box">
<input type="checkbox" value="5">
<label>标准版</label>
</div>
<div class="check-box">
<input type="checkbox" value="6">
<label>增强版</label>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row cl">
<label class="form-label col-xs-4 col-sm-2"></label>
<div class="formControls col-xs-8 col-sm-10">
<table class="table table-border table-bordered table-bg" id="tableAttr">
</table>
</div>
</div>
JAVASCRIPT代码
//如为编辑页面,HTML代码的Input需设置为checked,JS部分没有去做判断
//后端传过来的值,编辑SKU时使用,新建时设置为{}
/*
var query = {
'1_5_7':{
'price':'258',
'scan':'690001',
'sku':'H10GH'
},
'1_6_7':{
'price':'278',
'scan':'',
'sku':'H18GH'
},
'1_5_8':{
'price':'258',
'scan':'',
'sku':'H10GL'
},
'1_6_8':{
'price':'278',
'scan':'',
'sku':'H18GL'
}
};*/
var query = {};
var linekey = [];//初始化表格行内输入框的key值 $(function(){
$(':checkbox').on('ifChecked',function(){
$(this).attr('checked', true);
buildT();
}); $(':checkbox').on('ifUnchecked',function(){
$(this).removeAttr('checked');
buildT();
}); //buildT();//如果是编辑页面,去掉注释进行表格初始化
}); function buildT(){
var specs = [];
var maxline = 1;//初始化SKU最大行数
$('#specList').children().each(function(){
var _checkobj = $(this).find(':checked'), _list = [];
if(_checkobj.length == 0){
return;
}
$(_checkobj).each(function(index,item){
_list.push({
'title':$(item).parent().next().html(),//由于使用了iCheck插件,层级关系发生了变化,需要使用parent()来重新定位lable标签的值
'id':$(item).val()
});
}); data = {
'id': $(this).attr('server-id'),
'title':$(this).attr('server-name'),
'count':_checkobj.length,
'childlist':_list
}
maxline = maxline*parseInt(_checkobj.length);
specs.push(data);
});
//循环获取rowspan值
var yu = 1;
$(specs).each(function(index){
specs[index].row = (maxline/specs[index]['count'])/yu;
yu = yu*specs[index].count;
});
//构建表格行数据
var headarr = [], tbodyarr = [];
$(specs).each(function(index, item){
headarr.push(item.title);
tbodyarr = buildTT(tbodyarr, item);
});
var headdata = '', tbodydata = '';
$.each(headarr, function(index){
headdata += '<th>'+headarr[index]+'</th>';
});
headdata += '<th>价格</th><th>条形码</th><th>SKU</th>';
$.each(tbodyarr, function(index){
tbodydata += '<tr>'
+tbodyarr[index]
+'<td><input type="text" placeholder="" class="input-text" value=""></td>'
+'<td><input type="text" placeholder="" class="input-text" value=""></td>'
+'<td><input type="text" placeholder="" class="input-text" value=""></td>'
+'</tr>';
});
$('#tableAttr').html('').append('<thead><tr>'+headdata+'</tr></thead>').append('<tbody>'+tbodydata+'</tbody>');
buildTTT();
}
/**
* 构建表格每行的td值
* @param odata 前面经过处理的数据
* @param adata 需要新添加进去处理的数据
*/
function buildTT(odata, adata){
var data = [], _linekey = [];
if(odata.length==0){
$(adata.childlist).each(function(index, item){
var _data = '<td rowspan="'+adata.row+'" key="'+item.id+'">'+item.title+'</td>';
data.push(_data);
_linekey[index] = item.id;
});
}else{
var i=0;
$(odata).each(function(index, item){
$(adata.childlist).each(function(index2, item2){
var _item = index2 == 0 ? item.concat() : '';
var _data = _item + '<td rowspan="'+adata.row+'" key="'+item2.id+'">'+item2.title+'</td>';
data.push(_data);
_linekey[i] = linekey[index] + '_' +item2.id;
i++;
});
});
}
linekey = _linekey;
return data;
} function buildTTT(){
//对初始化的表格每行的key值进行排序,与入库值保持一致
$(linekey).each(function(index){
linekey[index] = linekey[index].split('_').sort().join('_');
}); //对初始化的表格input进行赋值
$('#tableAttr tbody').children('tr').each(function(index){
var _obj = $(this).find('input');
var _linekey = linekey[index];
_obj.eq(0).attr('name', 'price['+_linekey+']');
_obj.eq(1).attr('name', 'scan['+_linekey+']');
_obj.eq(2).attr('name', 'sku['+_linekey+']');
if(query[_linekey]){
_obj.eq(0).val(query[_linekey]['price']);
_obj.eq(1).val(query[_linekey]['scan']);
_obj.eq(2).val(query[_linekey]['sku']);
}
});
}
jquery特效 商品SKU属性规格选择实时联动的更多相关文章
- jquery实现商品sku多属性选择(商品详情页)
转载于https://blog.csdn.net/csdn924618338/article/details/51455595 实现效果 源码 <!DOCTYPE HTML> <ht ...
- 前端实现商品sku属性选择
一.效果图 二.后台返回的数据格式 [{ "saleName": "颜色", "dim": 1, "saleAttrList&qu ...
- 商品sku规格选择效果,没有商品的不能选中,选择顺序不影响展示结果
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...
- Vue实现仿淘宝商品详情属性选择的功能
Vue实现仿淘宝商品详情属性选择的功能 先看下效果图:(同个属性内部单选,属性与属性之间可以多选) 主要实现过程: 所使用到的数据类型是(一个大数组里面嵌套了另一个数组)具体格式如下: attrA ...
- (二)基于商品属性的相似商品推荐算法——Flink SQL实时计算实现商品的隐式评分
系列随笔: (总览)基于商品属性的相似商品推荐算法 (一)基于商品属性的相似商品推荐算法--整体框架及处理流程 (二)基于商品属性的相似商品推荐算法--Flink SQL实时计算实现商品的隐式评分 ( ...
- vue+element 实现商品sku效果
在网上搜索了很久,没有发现合适sku编辑的文章,只能自己写一个vue+element 的sku编辑功能.实现的效果如下图 除成本.售价.库存.货号这几个写死的属性外,可自行添加/删除商品属性,自行添加 ...
- B2C电子商务系统研发——商品SKU分析和设计(一)
一.SKU及相关概念定义 在设计商品SKU之前,首先让我们熟悉一下SKU和相关的一些概念. # 什么是SKU: SKU=Stock Keeping Unit(库存量单位) 同一型号的商品,或者说是同一 ...
- 电商ERP系统——商品SKU与库存设计
面试题经常问道,如何设计库存,哪些库存呢?分类属性的库存:不同颜色 不同尺码的属性的库存,这时候需要针对具体的SKU商品创建表. 总体思路 1.商品关联商品类别,商品类别关联多个商品属性,其中指定某几 ...
- 工具类:每次随机生成有销售库存有实际库存的1个店铺商品和对应的2个店铺商品sku
# coding:utf-8 # @fileName :2.每次随机生成有销售库存有实际库存的1个店铺商品和对应的2个店铺商品sku.py # @createTime :2020/4/4 10:33 ...
随机推荐
- gzip压缩目录
很遗憾,gzip不能针对整个目录进行压缩,只能递归压缩目录下的每一个文件. 当然,替代方案是只用tar进行打包,比如 tar cfz dir.tar.gz dirname
- CentOS7 rc.local开机开法启动
CentOS 7添加开机启动服务/脚本 一.添加开机自启服务 在CentOS 7中添加开机自启服务非常方便,只需要两条命令(以Jenkins为例):systemctl enable jenkins.s ...
- osgMulitiplerendertargets sample 中fbo使用【HTC VIVE开发中应用】
osgmultiplerendertargets.cpp ...................................... // now create the camera to do t ...
- Centos下输入法全角半角转换
写个文档 ,发现输入法的设置框没有了,打出来的字全是全角,找了半天终于发现在设置的快捷键. 废话少说,Centos的全角半角转换快捷键是shift+space. 中英文标点的转换快捷键 ctrl+.
- MS project 使用小技巧收集
如何使用的url: http://www.cnblogs.com/wangfupeng1988/p/3648994.html (好文,易上手) 一. 如何设置周末为工作日. 1. 在 “工具”-& ...
- mybatis常用jdbcType数据类型以及对应的JavaType
1.MyBatis 通过包含的jdbcType类型 BIT.FLOAT.CHAR .TIMESTAMP . OTHER .UNDEFINEDTINYINT .REAL .VARCHAR .BINARY ...
- poj 1426 Find The Multiple (bfs 搜索)
Find The Multiple Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 18012 Accepted: 729 ...
- Splunk 会议回想: 大数据的关键是机器学习
作者 Jonathan Allen ,译者 张晓鹏 Splunk的用户大会已经接近尾声.三天时间的会议里,共进行了160多个主题研讨.涵盖了从安全.运营到商业智能.甚至包含物联网,会议中一遍又一遍出现 ...
- 在FASTBuild中使用Distribution
上一篇:在FASTBuild中使用Caching 在FASTBuild中使用分布式(distribution)编译需要注意以下四个环节. 一.编译器设置 某些编译过程与分布式相矛盾,如果一个对象不能被 ...
- S7:享元模式 Flyweight
运用共享技术有效的支持大量细粒度的对象. 应用场景: A.减少对相同对象的重复创建 UML: 示例代码:如果在工厂中,有用户,我们就直接调用,没有用户,我们就获取.减少对同一uid的user对象的重复 ...