效果图(图片较大,加载较慢)


页面部分:

<div class="layui-form-item" id="add_attribute"><label class="layui-form-label">商品分类</label><div class="layui-input-inline" style="width: 13%;"><select name="cate_id" id="cate_id"  data="attribute" lay-filter="forAttribute"><option value="">请选择所属分类</option><?php foreach ($category as $key=>$value) : ?><option value="<?php echo $value['id']?>" ><?php echo $value['name']?></option><?php endforeach;?></select></div></div>

JS部分

layui.use(['form', 'layedit', 'laydate'], function() {var form = layui.form, layer = layui.layer, layedit = layui.layedit, laydate = layui.laydate;form.on('select(forAttribute)',function (data) {$('#forAttributeTable').remove()$('.attributeTable').remove()layui.use('form', function(){var form = layui.form;form.render();});$.ajax({type:"post",url:"admin/attrconfig/get_attribute",data:{'cate_id':data.value},dataType:"json",success:function (msg) {var htm = '';var length = msg.data.length;htm += '<div id="forAttributeTable">';for (var i = 0;i<length;i++){htm += '<div class="add"><div class="layui-form-item">' +'<div class="layui-input-block" style="height: 10px;">' +'<p>'+msg.data[i].name+'</p>' +'<div>';for(var j = 0;j<msg.data[i]['attrConfig'].length;j++){htm += '<input type="checkbox" class="attrconfig" id="attrconfig'+i+'" name="attrconfig['+msg.data[i]['attrConfig'][j]['id']+']" lay-skin="primary" title="'+msg.data[i]['attrConfig'][j]['name']+'" lay-filter="forTable">';}htm += '</div>' +'</div>' +'</div>' +'<div class="layui-form-item">' +'<div class="layui-input-block" >' +'<hr class="layui-bg-gray">' +'</div>' +'</div></div>';}htm += '</div>';$("#add_attribute").append(htm);layui.use('form', function(){var form = layui.form;form.render();});}})})form.on('checkbox(forTable)',function (data) {//获取复选框选中数据//console.log($('input:checkbox[id="'+data.elem.id+'"]:checked').val());//获取到复选框选中值的长度//console.log($('input:checkbox[id="'+data.elem.id+'"]:checked').length);//获取该分类下有多少个组//console.log($('.add').length);/*** 当点击复选框时,遍历各组之间被选择的个数的多少,将个数最少的那组,放置于数组最前。*/var len = $('.add').length;var arr = new Array();
//console.log(data.elem.name)
//console.log(data.elem.title)//当点击时,获取所有选中的checkbox的值var check_len = $('input:checkbox[id="'+data.elem.id+'"]:checked').length;var check_arr = new Array();$('input:checkbox[class="attrconfig"]:checked').each(function () {//获取所有选中的checkbox的name值//$(this)[0].name//获取所有选中的checkbook的title值//$(this)[0].titlecheck_arr.push({name:$(this)[0].name,title:$(this)[0].title,id:$(this)[0].id})})//得到拼接后的数组//将数组中id相同的数组合并成同一个数组var map = {};check_arr.forEach(function (item) {if(map[item.id] == undefined){var list = [];list.push(item);map[item.id] = list;}else{map[item.id].push(item);}})var new_arr = new Array();for (var i = 0;i<len;i++){if(map['attrconfig'+i] == undefined){new_arr[i] = "";}else{new_arr[i]=map['attrconfig'+i];}}for(var i = 0;i<len;i++){for(var j=i;j<len;j++){//console.log(new_arr[i].length)if(new_arr[i].length > new_arr[j].length){var temp = new_arr[i];new_arr[i] = new_arr[j];new_arr[j] = temp;}}}//console.log(new_arr)var sort_arr = [];for(var i=0;i<new_arr.length;i++){if(new_arr[i].length != 0){var v1 = [];for(var j=0;j<new_arr[i].length;j++){v1.push(new_arr[i][j].name)}sort_arr.push(v1)}}var arr = doExchange(sort_arr);var htm = '';var htm_tr = '';$('.attributeTable').remove()layui.use('form', function(){var form = layui.form;form.render();});htm += '<div class="attributeTable"><div class="layui-form-item">' +'<div class="layui-input-block">' +'<table class="layui-table">' +'<thead>' +'<tr>';for (var i=0;i<len;i++){if(new_arr[i].length != 0){htm += '<th>'+$('input[name="'+new_arr[i][0].name+'"]').parent().prev().text()+'</th>';}}if(arr != undefined){for (var i = 0;i<arr.length;i++){//判断arr[i]类型,是否为string或者object//如果为string,则之间增加if(typeof arr[i] == 'string'){htm_tr += '<td >'+$('input[name="'+arr[i]+'"]')[0].title+'</td>';htm_tr += '<td><input style="width: 100%;height: 100%;border: 0px;background-color: transparent;" name="price['+arr[i]+']"/></td>';htm_tr += '<td><input style="width: 100%;height: 100%;border: 0px;background-color: transparent;" name="number['+arr[i]+']"/></td>';htm_tr += '</tr>'}else{for(var j=0;j<arr[i].length;j++){htm_tr += '<td >'+$('input[name="'+arr[i][j]+'"]')[0].title+'</td>';}htm_tr += '<td><input style="width: 100%;height: 100%;border: 0px;background-color: transparent;" name="price['+arr[i]+']"/></td>';htm_tr += '<td><input style="width: 100%;height: 100%;border: 0px;background-color: transparent;" name="number['+arr[i]+']"/></td>';htm_tr += '</tr>'}}htm += '<th>价格</th>' +'<th>数量</th>';htm += '</tr>' +'</thead>' +'<tbody>';htm += htm_tr;htm += '</tbody>' +'</table>' +'</div>' +'</div></div>';$("#forAttributeTable").append(htm);layui.use('form', function(){var form = layui.form;form.render();});}})});function doExchange(arr){var len = arr.length;// 当数组大于等于2个的时候if(len >= 2){// 第一个数组的长度var len1 = arr[0].length;// 第二个数组的长度var len2 = arr[1].length;// 2个数组产生的组合数var lenBoth = len1 * len2;//  申明一个新数组var items = new Array(lenBoth);// 申明新数组的索引var index = 0;for(var i=0; i<len1; i++){for(var j=0; j<len2; j++){if(arr[0][i] instanceof Array){items[index] = arr[0][i].concat(arr[1][j]);}else{items[index] = [arr[0][i]].concat(arr[1][j]);}index++;}}var newArr = new Array(len -1);for(var i=2;i<arr.length;i++){newArr[i-1] = arr[i];}newArr[0] = items;return doExchange(newArr);}else{return arr[0];}}

自定义商品分类,选择分类之后,添加商品附属性;仿淘宝后台添加商品附属性的价格和数量相关推荐

  1. 仿淘宝后台设置商品SKU

    仿淘宝后台设置商品SKU 效果图 关键代码 function getVariantFun(doubelArrays) {let len = doubelArrays.length; //获取最外层的长 ...

  2. Android仿淘宝首页UI(附代源代码及示例图片)

    Android仿淘宝首页UI(附代源代码及示例图片) 可以收获 运行出来的效果 部分代码 源代码 可以收获 更改Layout中的文字和drawble中的图片即可生成适应于不同情景的APP,帮助开发者完 ...

  3. ecshop 商品颜色尺寸仿淘宝选择功能教程(2.7.0版本)

    牵涉到的修改文件(default模板为例) /themes/default/style.css /themes/default/goods.dwt 注:此路径待修改模板路径. 修改步骤: 一:控制样式 ...

  4. 【ECSHOP插件】商品颜色尺寸仿淘宝选择功能免费发布

    先放效果图,如此实用的功能是不是迫不及待的要添加到自己的网店中了呢   牵涉到的修改文件(default模板为例) /themes/default/style.css /themes/default/ ...

  5. android 仿淘宝、京东商品详情页 向上拖动查看图文详情控件

    一.淘宝商品详情页效果 先看一下淘宝详情页的效果 我们的效果 二.实现思路 使用两个scrollView,两个scrollView 竖直排列,通过自定义viewGroup来控制两个scrollView ...

  6. Android 仿淘宝2018添加地址

    先来看看淘宝2018的添加收货地址的效果 分析实现的原理: bottomDialog=tabLayout+RecyclerView 其中的2个特点: 1.tablayout的动态添加的,并且选中ite ...

  7. Android 仿淘宝2017添加地址

    最近想做个商城仿淘宝收货地址选择,在网上搜索"android 淘宝收货地址",就看到了想要的效果. 文章写的不错,可惜菜鸟级的我很多看不懂,所以用例外一种方式实现了. 这里用到的数 ...

  8. 【jquery】优化仿淘宝五星评价打分(附注释)

    在前面的博文http://blog.csdn.net/lzgs_4/article/details/47913629,我们已经把仿淘宝五星评价打分功能实现出来了,实现五星打分的思路基本就是前面博文提到 ...

  9. 仿淘宝中的评价晒单中选择图片可以预览,添加,删除

    前一篇文章写了如何把input="file"的默认样式改为自己想要的样式所以这篇是在这个的基础上写的,也就是说改变成了自己想要的样式之后,点击选择图片,可以放在一个div中预览,同 ...

最新文章

  1. 我们在运营前还需要准备的技术储备
  2. 【CoppeliaSim】远程 API 之 Matlab 控制,对比 V-rep 有些不同
  3. C#使用ping命令
  4. 文件重命名批量处理(Matlab)
  5. 解决QQ未启用状态,QQ留言图标未启用
  6. 深度学习自学(三十):基于深度学习误排序学习的行人重识别对抗攻击
  7. 支付宝mysql集群_支付宝支撑2135亿成交额的数据库架构原理
  8. python简明教程_01
  9. E-Prime教程 | 打mark标记
  10. Php 实现在文档只读功能,如何将只读文档变成可编辑模式?
  11. 秃顶之路-Day11
  12. 购物网站HTML(首页)
  13. 基础——树莓派3B配置
  14. integer conversion resulted in a change of sign
  15. PAKDD 2019 AutoML 挑战赛圆满落幕,中国队伍包揽前三...
  16. We're sorry but vue_blog doesn't work properly without JavaScript enabled. Please enable it to.....
  17. java测试工程师培训,看这一篇就够了
  18. net.sf.json.JSONException: Unterminated string at character 1801
  19. python-分分钟入门-简介
  20. 使用微信小程序实现学生登录

热门文章

  1. Maple与Mathematica的对比分析
  2. 我心中的vi 编辑神器
  3. 与“奸商”打交道的十条戒律
  4. Android应用截图两种方法
  5. python量化实战 顾比倒数线_顾比倒数线的画法及使用条件详解
  6. Spring Boot 使用Redis发布订阅模式处理消息
  7. 计算机科学与技术各大学排名,计算机科学与技术学科排行榜(大学名单大全2020版)...
  8. JS实现一个简单的抽奖页面
  9. 什么是网站镜像,网站被镜像的原因及解决方法
  10. 陕西计算机三本院校排名,陕西三本院校排名文科