查看: 593|回复: 0

商城商品多规格JQ前端代码实现

[复制链接]

748

主题

39

回帖

3907

积分

管理员

总舵主

积分
3907
QQ
发表于 2024-5-25 18:06:49 | 显示全部楼层 |阅读模式
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="utf-8">
  5.     <link rel="stylesheet" href="http://cdn.bootcss.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css">
  6. </head>
  7. <body>
  8. <div class="control-group">
  9.     <label class="control-label"> </label>
  10.     <div class="controls">
  11.         <button id="add_lv1" class="btn btn-primary" type="button">添加规格项</button>
  12.         <button id="update_table" class="btn btn-success" type="button">刷新规格项目表</button>
  13.     </div>
  14. </div>
  15. <div id="lv_table_con" class="control-group" style="display: none;">
  16.     <label class="control-label">规格项目表</label>
  17.     <div class="controls">
  18.         <div id="lv_table">
  19.             
  20.         </div>
  21.     </div>
  22. </div>
  23. <script src="http://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
  24. <script>
  25.     var lv1HTML = '<div class="control-group lv1">' +
  26.         '<label class="control-label">规格名称</label>' +
  27.         '<div class="controls">' +
  28.         '<input type="text" name="lv1" placeholder="规格名称">' +
  29.         '<button class="btn btn-primary add_lv2" type="button">添加参数</button>' +
  30.         '<button class="btn btn-danger remove_lv1" type="button">删除规格</button>' +
  31.         '</div>' +
  32.         '<div class="controls lv2s"></div>' +
  33.         '</div>';

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

  38.     $(document).ready(function() {
  39.         $('#add_lv1').on('click', function() {
  40.             var last = $('.control-group.lv1:last');
  41.             if (!last || last.length == 0) {
  42.                 $(this).parents('.control-group').eq(0).after(lv1HTML);
  43.             } else {
  44.                 last.after(lv1HTML);
  45.             }
  46.         });

  47.         $(document).on('click', '.remove_lv1', function() {
  48.             $(this).parents('.lv1').remove();
  49.         });

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

  53.         $(document).on('click', '.remove_lv2', function() {
  54.             $(this).parent().remove();
  55.         });

  56.         $('#update_table').on('click', function() {
  57.             var lv1Arr = $('input[name="lv1"]');
  58.             if (!lv1Arr || lv1Arr.length == 0) {
  59.                 $('#lv_table_con').hide();
  60.                 $('#lv_table').html('');
  61.                 return;
  62.             }
  63.             for (var i = 0; i < lv1Arr.length; i++) {
  64.                 var lv2Arr = $(lv1Arr[i]).parents('.lv1').find('input[name="lv2"]');
  65.                 if (!lv2Arr || lv2Arr.length == 0) {
  66.                     alert('请先删除无参数的规格项!');
  67.                     return;
  68.                 }
  69.             }

  70.             var tableHTML = '';
  71.             tableHTML += '<table class="table table-bordered">';
  72.             tableHTML += '    <thead>';
  73.             tableHTML += '        <tr>';
  74.             for (var i = 0; i < lv1Arr.length; i++) {
  75.                 tableHTML += '<th width="50">' + $(lv1Arr[i]).val() + '</th>';
  76.             }
  77.             tableHTML += '            <th width="20">现价</th>';
  78.             tableHTML += '            <th width="20">原价</th>';
  79.             tableHTML += '        </tr>';
  80.             tableHTML += '    </thead>';
  81.             tableHTML += '    <tbody>';

  82.             var numsArr = new Array();
  83.             var idxArr = new Array();
  84.             //numsArr记录每个规格又多少个参数,并用idxarr记录规格数组下标 方便后边标记name
  85.             for (var i = 0; i < lv1Arr.length; i++) {
  86.                 numsArr.push($(lv1Arr[i]).parents('.lv1').find('input[name="lv2"]').length);
  87.                 idxArr[i] = 0;
  88.             }

  89.             var len = 1;
  90.             var rowsArr = new Array();
  91.             for (var i = 0; i < numsArr.length; i++) {
  92.                 //len  记录参数总行数
  93.                 len = len * numsArr[i];

  94.                 var tmpnum = 1;
  95.                 for (var j = numsArr.length - 1; j > i; j--) {
  96.                     tmpnum = tmpnum * numsArr[j];
  97.                 }
  98.                 //当前规格每个参数所占行数
  99.                 rowsArr.push(tmpnum);
  100.             }

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

  103.                 var name = '';
  104.                 for (var j = 0; j < lv1Arr.length; j++) {
  105.                     var n = parseInt(i / rowsArr[j]);
  106.                     if (j == 0) {
  107.                     } else if (j == lv1Arr.length - 1) {
  108.                         n = idxArr[j];
  109.                         if (idxArr[j] + 1 >= numsArr[j]) {
  110.                             idxArr[j] = 0;
  111.                         } else {
  112.                             idxArr[j]++;
  113.                         }
  114.                     } else {
  115.                         var m = parseInt(i / rowsArr[j]);
  116.                         n = m % numsArr[j];
  117.                     }

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

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

  128.                 tableHTML += '<td width="20"><input type="text" name="' + name + '[price]" /></td>';
  129.                 tableHTML += '<td width="20"><input type="text" name="' + name + '[original_price]" /></td>';
  130.                 tableHTML += '</tr>';
  131.             }
  132.             tableHTML += '</tbody>';
  133.             tableHTML += '</table>';

  134.             $('#lv_table_con').show();
  135.             $('#lv_table').html(tableHTML);
  136.         });
  137.     });
  138. </script>
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
道不同,不相为谋!理想要有,万一实现了呢?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:2513533699@qq.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.|鲁ICP备19000917号|鲁公网安备37078302000320号

在本版发帖
关注公众号
QQ客服返回顶部