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 ...
随机推荐
- React Native之ES5/ES6语法差异对照表
很多React/React Native的初学者都被ES6的问题迷惑:各路大神都建议我们直接学习ES6的语法(class Foo extends React.Component),然而网上搜到的很多教 ...
- Android Studio 下使用git -- 个人,本地版本控制
第一步:下载安装git 下载地址 : https://git-scm.com/downloads 第二步:Android Studio 下配置git路径. 配置之后,Test弹出如下成功的提示即可. ...
- Python的编码注释# -*- coding:utf-8 -*-
# -*- coding:utf-8 -*-的主要作用是指定文件编码为utf-8, 因为一般默认的是ASCII码,如果要在文件里面写中文,运行时会出现乱码,加上这句之后会把文件编码强制转换为utf-8 ...
- Java使用POM一JAR包的形式管理JavaScript文件-WebJars
说明:原来JS框架还可以使用POM进行管理的.WebJars是一个很神奇的东西,可以让大家以JAR包的形式来使用前端的各种框架.组件. 什么是WebJars 什么是WebJars?WebJars是将客 ...
- 64位下安装Scrapy 报错 "could not find openssl.exe" 的解决方法。
其实就是安装对应的64位 pyOpenSSL 就行了, 下载地址如下: https://tahoe-lafs.org/source/tahoe-lafs/deps/tahoe-lafs-dep-egg ...
- Golang优秀开源项目汇总, 10大流行Go语言开源项目, golang 开源项目全集(golang/go/wiki/Projects), GitHub上优秀的Go开源项目
Golang优秀开源项目汇总(持续更新...)我把这个汇总放在github上了, 后面更新也会在github上更新. https://github.com/hackstoic/golang-open- ...
- 64个命令,每天一个linux命令目录, shutdown,tee,rcp,
每天一个linux命令目录 开始详细系统的学习linux常用命令,坚持每天一个命令,所以这个系列为每天一个linux命令.学习的主要参考资料为: 1.<鸟哥的linux私房菜> 2.htt ...
- XSS-Proxy之技术总结
今天看了大风的文章,关于Cross Iframe Trick的思路.让我想到了曾经看到的关于XSS Proxy的一些文章. Advanced Cross-Site-Scripting with Rea ...
- GPU Skin
http://blog.csdn.net/leonwei/article/details/77387357 TPOSE存vbo 每根骨骼的matrices存在貼圖裏用vertex fetch 做GPU ...
- 【千纸诗书】—— PHP/MySQL二手书网站后台开发之项目设计
前言:这个项目是毕设时候做的,我负责后台数据操作部分,已经很久了,这次回顾这部分,是为了复习PHP和MySQL的知识,正好现在在公司也负责的是后台管理系统的业务.第一篇[项目概况]附上毕业论文部分节选 ...