关于添加商品多规格生成表格的功能实现

最近商品后台需要添加商品多规格的需求,具体是:用户可以自定义规格以及参数,然后再自定义组合规格参数生成商品表单编辑商品信息;

这个功能我做了两次都以失败告终,越做越复杂,在网上看到某位大神的小demo,感觉很好就放出来做参考:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <link rel="stylesheet" href="http://cdn.bootcss.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css">
</head>
<body>
<div class="control-group">
    <label class="control-label"> </label>
    <div class="controls">
        <button id="add_lv1" class="btn btn-primary" type="button">添加规格项</button>
        <button id="update_table" class="btn btn-success" type="button">刷新规格项目表</button>
    </div>
</div>
<div id="lv_table_con" class="control-group" style="display: none;">
    <label class="control-label">规格项目表</label>
    <div class="controls">
        <div id="lv_table">

        </div>
    </div>
</div>
<script src="http://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
<script>
    var lv1HTML = ‘<div class="control-group lv1">‘ +
                    ‘<label class="control-label">规格名称</label>‘ +
                    ‘<div class="controls">‘ +
                        ‘<input type="text" name="lv1" placeholder="规格名称">‘ +
                        ‘<button class="btn btn-primary add_lv2" type="button">添加参数</button>‘ +
                        ‘<button class="btn btn-danger remove_lv1" type="button">删除规格</button>‘ +
                    ‘</div>‘ +
                    ‘<div class="controls lv2s"></div>‘ +
                ‘</div>‘;

    var lv2HTML = ‘<div style="margin-top: 5px;">‘ +
                    ‘<input type="text" name="lv2" placeholder="参数名称">‘ +
                    ‘<button class="btn btn-danger remove_lv2" type="button">删除参数</button>‘ +
                ‘</div>‘;

    $(document).ready(function() {
        $(‘#add_lv1‘).on(‘click‘, function() {
            var last = $(‘.control-group.lv1:last‘);
            if (!last || last.length == 0) {
                $(this).parents(‘.control-group‘).eq(0).after(lv1HTML);
            } else {
                last.after(lv1HTML);
            }
        });

        $(document).on(‘click‘, ‘.remove_lv1‘, function() {
            $(this).parents(‘.lv1‘).remove();
        });

        $(document).on(‘click‘, ‘.add_lv2‘, function() {
            $(this).parents(‘.lv1‘).find(‘.lv2s‘).append(lv2HTML);
        });

        $(document).on(‘click‘, ‘.remove_lv2‘, function() {
            $(this).parent().remove();
        });

        $(‘#update_table‘).on(‘click‘, function() {
            var lv1Arr = $(‘input[name="lv1"]‘);
            if (!lv1Arr || lv1Arr.length == 0) {
                $(‘#lv_table_con‘).hide();
                $(‘#lv_table‘).html(‘‘);
                return;
            }
            for (var i = 0; i < lv1Arr.length; i++) {
                var lv2Arr = $(lv1Arr[i]).parents(‘.lv1‘).find(‘input[name="lv2"]‘);
                if (!lv2Arr || lv2Arr.length == 0) {
                    alert(‘请先删除无参数的规格项!‘);
                    return;
                }
            }

            var tableHTML = ‘‘;
            tableHTML += ‘<table class="table table-bordered">‘;
            tableHTML += ‘    <thead>‘;
            tableHTML += ‘        <tr>‘;
            for (var i = 0; i < lv1Arr.length; i++) {
                tableHTML += ‘<th width="50">‘ + $(lv1Arr[i]).val() + ‘</th>‘;
            }
            tableHTML += ‘            <th width="20">现价</th>‘;
            tableHTML += ‘            <th width="20">原价</th>‘;
            tableHTML += ‘        </tr>‘;
            tableHTML += ‘    </thead>‘;
            tableHTML += ‘    <tbody>‘;

            var numsArr = new Array();
            var idxArr = new Array();
            for (var i = 0; i < lv1Arr.length; i++) {
                numsArr.push($(lv1Arr[i]).parents(‘.lv1‘).find(‘input[name="lv2"]‘).length);
                idxArr[i] = 0;
            }

            var len = 1;
            var rowsArr = new Array();
            for (var i = 0; i < numsArr.length; i++) {
                len = len * numsArr[i];

                var tmpnum = 1;
                for (var j = numsArr.length - 1; j > i; j--) {
                    tmpnum = tmpnum * numsArr[j];
                }
                rowsArr.push(tmpnum);
            }

            for (var i = 0; i < len; i++) {
                tableHTML += ‘        <tr data-row="‘ + (i+1) + ‘">‘;

                var name = ‘‘;
                for (var j = 0; j < lv1Arr.length; j++) {
                    var n = parseInt(i / rowsArr[j]);
                    if (j == 0) {
                    } else if (j == lv1Arr.length - 1) {
                        n = idxArr[j];
                        if (idxArr[j] + 1 >= numsArr[j]) {
                            idxArr[j] = 0;
                        } else {
                            idxArr[j]++;
                        }
                    } else {
                        var m = parseInt(i / rowsArr[j]);
                        n = m % numsArr[j];
                    }

                    var text = $(lv1Arr[j]).parents(‘.lv1‘).find(‘input[name="lv2"]‘).eq(n).val();
                    if (j != lv1Arr.length - 1) {
                        name += text + ‘_‘;
                    } else {
                        name += text;
                    }

                    if (i % rowsArr[j] == 0) {
                        tableHTML += ‘<td width="50" rowspan="‘ + rowsArr[j] + ‘" data-rc="‘ + (i+1) + ‘_‘ + (j+1) + ‘">‘ + text + ‘</td>‘;
                    }
                }

                tableHTML += ‘<td width="20"><input type="text" name="‘ + name + ‘[price]" /></td>‘;
                tableHTML += ‘<td width="20"><input type="text" name="‘ + name + ‘[original_price]" /></td>‘;
                tableHTML += ‘</tr>‘;
            }
            tableHTML += ‘</tbody>‘;
            tableHTML += ‘</table>‘;

            $(‘#lv_table_con‘).show();
            $(‘#lv_table‘).html(tableHTML);
        });
    });
</script>
</body>
</html>

需要的可以直接copy看效果演示

时间: 2024-11-20 13:09:59

关于添加商品多规格生成表格的功能实现的相关文章

商品列表页一次添加多个规格

可能题目的表述不是特别清晰,具体有一下截图看这会比较明显 页面上的功能描述1. 当页面加载完成后,需要根据不同规格的商品刷新出对应规格商品的价格,2.重置默认数量,这个功能在input标签中设置默认的value值即可,或者添加一个js函数,重置对应class集合中的值,这个不多说,比较简单,3.点击添加购物车,需要把例如上图中的不同规格中的商品能全部添加到购物车 解题思路,要求1,这个任务比较简单,由于这种方式,后台里的商品规格选项必须用单选按钮来做,否则页面效果不容易实现具体要实现什么样式自己

javascript生成表格增删改查 JavaScript动态改变表格单元格内容 动态生成表格 JS获取表格任意单元格 javascript如何动态删除表格某一行

jsp页面表格布局Html代码 <body > <center> <input type="text" value="111" id="mytext"> <table border="1" width="60%" id="mytable"> <tr> <td id="td1">第一行第一列<

Android动态生成表格

最近刚刚学习完Android的五大布局,现在我们进一步深入学习,尝试做一个动态生成表格功能的例子 样式布局代码如下: 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4

estore商城案例(四、五)------添加购物车&amp;购物车显示/生成订单&amp;在线支付

一.添加购物车 1.获得商品id提交到servlet程序 2.根据id获取product对象 3.判断seesion中是否有存在购物车session.没有的话表示  添加的第一件商品  需要先创建session:有的话直接在session里添加获得的produce(添加product 要先判断session中是否存在对应的商品,存在话直接修改商品数量,没有的话新添加这个商品). servlet程序代码: 1 public void doGet(HttpServletRequest request

estore商城案例(二)------登录&amp;添加商品&amp;商品列表(下)

撸完了登录模块,接着撸商品添加,和商品列表模块: 先亮出数据库: 1 DROP TABLE IF EXISTS products; 2 CREATE TABLE products ( 3 id varchar(100) NOT NULL, 4 name varchar(100) DEFAULT NULL, 5 price double DEFAULT NULL, 6 category varchar(100) DEFAULT NULL, 7 pnum int(11) DEFAULT NULL,

[PHP] 商品类型规格属性后台管理(代码流程备忘)

实现界面 涉及到四张表,type(商品类型表),type_spec(商品类型规格关联表),attribute(商品属性表),attribute_value(商品属性值表) 新建基控制器BaseController.class.php,向上抽取出来的公用方法 BaseController.class.php <?php namespace Admin\Controller; use Think\Controller; class BaseController extends Controller

JS实现动态生成表格并向后端提交表格数据(一)

前段时间开发了一些web应用,其中就有涉及到动态的表格问题,因为很久没有写web前端了,所以在网上找了一些资料,发现很零碎,于是自己就根据找到的资料写了这么一个小功能,主要是供自己记忆,如果能帮到你很荣幸,如果你有更好的方法,也可以相互讨论,相互学习一下. 先来看一下需求:在web页面上动态的生成表格,并可以对表格中的数据进行编辑,然后把表格中的数据提交至后端服务器保存. 那么我们首先需要解决的是动态生成表格的问题 1.首先我们需要导入JS库文件. 1 <script src="../js

GZFramwork快速开发框架演练之会员系统(四)添加商品管理

  1.1:创建表结构 新建三张商品关联的表,表模型如下:   创建SQL语句略 1.2:生成表Model(生成方法见上一节) 1.3:生成tb_ProductType的单结构界面然后添加到项目中     1.4:修改GZVIP.Dictionary模块中DictionaryMain类,新增产品类型功能   public class DictionaryMain : ModuleFunctionManage { public DictionaryMain() { FunPools.AddFunc

JS实现动态生成表格并提交表格数据向后端 表格中数据转为json

原文地址 需求:在web页面上动态的生成表格,并可以对表格中的数据进行编辑,然后把表格中的数据提交至后端服务器保存. 首先动态生成表格. 1.首先我们需要导入JS库文件.jQuery 2.然后在页面div中事先创建一个空白表格,可以根据需求而定,我这里是一个带表头的表格 <table border="0" style="text-align: center;" width="100%" id="myTable">