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 ...
随机推荐
- EF需要注意的virtual,懒加载,还有1对n更新
1.如果实体类型有任何一个集合属性是 virtual 的,那么该属性会懒加载,在查询该对象时,看到的类型是代理对象(proxy_xxxx), 使用new来更新1对n关系时会 增加 ).FirstOrD ...
- Inno Setup入门(十五)——Inno Setup类参考(1)
Inno setup脚本能够支持许多的类,这些类使得安装程序的功能得到很大的加强,通过对这些类的使用,将会创建出许多让人惊奇的安装程序,下面开始类的学习. 创建自定义向导页 自定义向导页需要在Init ...
- win10下安装mysql5.6 zip形式步骤
1. 解压之后可以将该文件夹改名,放到合适的位置,个人建议把文件夹改名为MySQL Server 5.6,放到C:\Program Files\MySQL路径中. 2. 添加环境变量.path中添加C ...
- 【转】谈基于SOA的应用系统设计和开发
注:在网上看到这篇文档,觉得写得很好,清晰实用.该博客其它文章也写得不错 地址:http://blog.sina.com.cn/s/blog_493a84550101gswn.html 现在对 ...
- android多线程-AsyncTask之工作原理深入解析(上)
关联文章: Android 多线程之HandlerThread 完全详解 Android 多线程之IntentService 完全详解 android多线程-AsyncTask之工作原理深入解析(上) ...
- 部署web Service到tomcat
建立项目 打开jdeveloper 12c,然后新建一个java项目,点击java,生成web services. package simple; import javax.jws.WebMethod ...
- Jquery获取对象的几种方式介绍
参考: 1.http://blog.csdn.net/zengyonglan/article/details/53995295 2.http://api.jquery.com/category/sel ...
- 微信跳一跳 可以直接更改分数, POST 请求没有校验
这两天逛 v 站出现了一众微信跳一跳 'AI',已经被刷屏了…… https://www.v2ex.com/t/418833 https://www.v2ex.com/t/418775 https:/ ...
- 使用spice连接kvm guest主机
spice技术已经出来很久了,其是优于VNC的一种远程桌面协议,之所以这里记录下,是由于某些加密视频文件(如以vpy结尾的超时代视频加密),会识别主机的特征吗,一旦主机重启后这些视频又没法查看了,所以 ...
- PHP Xdebug调试专题
1.介绍与安装 Xdebug是一个PHP扩展,安装配置好后,可以自动记录运行了哪些函数,用了多少毫秒,从哪个文件运行到哪个文件等等 它记下来的调试信息很详细,对一些复杂程序跟踪调试有很大的辅助效果,能 ...