亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

BootStrap實現樹形目錄組件代碼詳解

2019-11-20 09:38:51
字體:
來源:轉載
供稿:網友

需求描述

產品添加頁面,需要選擇車型。在bootStrap的modal上彈出子modal來使用。

車型一共有4級目錄。要使用目錄樹。

然后分活動和商品兩種,需要能夠通過不通參數來調用該組件。

車型品牌要使用字母導航。

技術實現

數據都是后端傳json過來,我們ajax獲取然后操作。

由于車型總數據有幾萬條以上,不可能一次性請求過來。這里我們使用異步的方式,每點擊一次目錄節點,加載它的下一級。

這里我們用兩個參數來控制活動和商品的不同加載。_showPrice和opened

后端傳過來的第一級數據是車型品牌,其中有首字母的字段。字母導航的初始化,就是把這個數據用firstWord屬性來排序,然后忽略掉其他首字母相同的元素。

對于活動類型,需要返回所勾選的最低一級的數據。(勾選奧迪和奧迪A6,則只返回A6的意思),這里用了整整4層循環。不過它是根據是否有checked來遍歷的,速度不慢。

 /** * Created by nuenfeng on 2016/5/23. * 車型選擇組件 * 參數: * showPrice 是否要輸入價格(不輸入價格的從品牌開始就有選項框,沒有全選功能) * params 外部傳入的對象 * callback 回調函數 */ (function () { var uriCarBrand = global.url.carBrandList; //var uri = uriCarBrand.url; var opened = false; //當前頁面是否打開過本組件 var _callback; //回調函數 var requestParams; //請求時要使用的參數 var _showPrice; //是否要輸入價格 var lastShowPrice; //前一次打開狀態 var charNavArr; //字母導航數組 function CarTree(showPrice, params, callback) { // 沒打開過,初始化; 打開過,直接顯示modal requestParams = params; _showPrice = showPrice; _callback = callback; if (!opened || lastShowPrice != showPrice) { this.init(); opened = true; lastShowPrice = showPrice; } else { $('#zc-sub-modal').modal('show'); } } CarTree.prototype.init = function () {  msjcTools.addSubModal(); //設置大模態框 $('#zc-sub-modal').addClass("bs-example-modal-lg"); $('#zc-sub-modal .modal-dialog').addClass("modal-lg"); var str = '<form id="info-form" data-parsley-validate class="form-horizontal form-label-left">'; str += '<ul id="resourceId" class="treeview-gray">' str += '<li id="cb_"><span>汽車品牌選擇</span>'; str += "</li>" str += '</ul>' str += '</form>';  var objId = 'cb_0'; var carBrandId = 0;loadSubMenu(objId, carBrandId, 1); //1 表示第一次加載,用于加載成功后判斷時候要初始化字母導航 $('#zc-sub-modal-body').html(str); $('#zc-sub-modal').modal({ keyboard: false, show: true }); // 點擊保存事件 $('#zc-sub-modal .modal-footer .btn.btn-primary').unbind().bind("click", function () { save(); }); //$("#resourceId").find("input[type=checkbox]").unbind().bind("click",function(){ // if($(this).is(':checked')==true){//選中 則其上層節點全部展開并選中 // //上級選中 // $(this).parents("li").each(function(){ // $(this).find("input[type=checkbox]:first").attr("checked",true) // }); // } else { // //下級取消選中 // $(this).siblings("ul").find("input[type=checkbox]").each(function(){ // $(this).removeAttr("checked"); // }); // } //}); //隱藏子窗口后 保持父窗口的滾動 $("#zc-sub-modal").on("hidden.bs.modal", function () { $('body').addClass('modal-open') }); } CarTree.prototype.empty = function () { opened = false; console.log('empty me'); } //加載子菜單 var loadSubMenu = function (objId, carBrandId, times) { requestParams.brandId = carBrandId; executeAjax(global.url.carBrandList, requestParams, function (data) { // 給data風騷地排個序 data.sort(keysrt("firstWord")); var menuHtml = "<ul>"; for (var index in data) { var menu = data[index]; menuHtml += '<li id="cb_' + menu.carBrandId + '" value="' + menu.carBrandId + '" brand="' + menu.brand + '">'; // 帶價格的樹 if (_showPrice) { // 最后一級,添加選項框 if (menu.level > 3) { menuHtml += '<input type="checkbox" name="resourceIds" value="' + menu.carBrandId + '" />'; } menuHtml += '<span>' + menu.name + '</span>'; // 最后一級,添加輸入框 if (menu.level == 4) { menuHtml += '<input type="text" maxlength="">'; } } else { // 不帶價格的樹 menuHtml += '<input type="checkbox" name="resourceIds" value="' + menu.carBrandId + '" />'; menuHtml += '<span>' + menu.name + '</span>'; } menuHtml += "</li>"; } menuHtml += "</ul>"; $('#' + objId).append(menuHtml); $('#' + objId).attr('data-load', 'loaded'); //汽車類型第一級加載完成后,初始化字符導航 charNavArr = []; var fwdLast = ''; //上一次的首字母 for (var i in data) { var cobjTemp = {}; if (fwdLast != data[i].firstWord) { fwdLast = data[i].firstWord; cobjTemp.firstWord = fwdLast; cobjTemp.targetId = 'cb_'+data[i].carBrandId; charNavArr.push(cobjTemp); } } if (times == 1) { initCharNav(); // 點擊保存事件 $('.charNavSaveBtn').unbind().bind("click", function () { save(); }); } }); } // 此處是風騷的數組對象排序 var keysrt = function (propertyName) { return function (object1, object2) { var value1 = object1[propertyName]; var value2 = object2[propertyName]; if (value2 < value1) { return 1; }else if (value2 > value1) { return -; } else { return ; } } } // 保存事件 var save = function(){ // 確認后,執行回調函數 if (_showPrice) { var res = getPriceResult(); if (res.status) { _callback(res.data); } else { alert(res.error); return; } } else { _callback(getNopriceResult()); } //返回數據,然后隱藏 $('#zc-sub-modal').modal('hide'); } // 設置字符導航初始化 var initCharNav = function () { var charNavHtml = '<ul id="charNavBar" class="charNavBar pagination">'; for (var i in charNavArr) { charNavHtml += '<li><a href="#'+charNavArr[i].targetId+'">'+charNavArr[i].firstWord+'</a></li>'; } charNavHtml += '<li><a class="modalGoTop">↑</a></li>'; charNavHtml += '<button type="button" class="btn btn-primary charNavSaveBtn">保存</button>'; charNavHtml += '</ul>'; $('#zc-sub-modal').append(charNavHtml); $('.modalGoTop').on('click', function(e){ $('#zc-sub-modal').animate({scrollTop: }, ); }); } // 統計帶價格的返回數據 var getPriceResult = function () { var result = { status : true, data : [], error : '' }; var liTemp; var objTemp; $('.treeview-gray input:checkbox:checked').each(function (i) { liTemp = $(this).parent('li'); objTemp = {}; objTemp.carBrandId = liTemp.attr('value'); objTemp.brand = liTemp.attr('brand'); objTemp.carBrandName = liTemp.find('span').text(); objTemp.unitPrice = liTemp.find('input:text').val(); // 如果價格沒有輸入,返回保存失敗,并返回沒有輸入的carBrandName if(objTemp.unitPrice == '') { result.status = false; result.error = '請輸入 ' + objTemp.carBrandName + ' 的價格!'; return result; } result.data.push(objTemp); }); return result; } // 統計不帶價格的返回數據 var getNopriceResult = function () { var result = []; var liTemp; var objTemp; var flag1; var flag2; var flag3; var flag4; var levelName;  // 遍歷4層 $('#cb_').children().children('li').children('input:checkbox').each(function (i) { if ($(this).is(':checked')) { flag = true; } else { flag = false; } $(this).parent().children().children('li').children('input:checkbox').each(function (i) { if ($(this).is(':checked')) { flag = false; flag = true; } else { flag = false; } // 獲取第二級的名字,給第三級使用 liTemp = $(this).parent('li'); level2Name = liTemp.children('span').text(); $(this).parent().children().children('li').children('input:checkbox').each(function (i3) { if ($(this).is(':checked')) { flag1 = false; flag2 = false; flag3 = true; } else { flag3 = false; } $(this).parent().children().children('li').children('input:checkbox').each(function (i4) { if ($(this).is(':checked')) { flag1 = false; flag2 = false; flag3 = false; flag4 = true; } else { flag4 = false; } if (flag4) { liTemp = $(this).parent('li'); objTemp = {}; objTemp.carBrandId = liTemp.attr('value'); objTemp.brand = liTemp.attr('brand'); //objTemp.carBrandName = liTemp.children('span').text(); objTemp.carBrandName = objTemp.brand + ' ' + liTemp.children('span').text(); result.push(objTemp); } }); if (flag) { liTemp = $(this).parent('li'); objTemp = {}; objTemp.carBrandId = liTemp.attr('value'); objTemp.brand = liTemp.attr('brand'); //objTemp.carBrandName = liTemp.children('span').text(); objTemp.carBrandName = objTemp.brand + ' ' + levelName + ' ' + liTemp.children('span').text(); result.push(objTemp); } });if (flag2) { //liTemp = $(this).parent('li'); objTemp = {}; objTemp.carBrandId = liTemp.attr('value'); objTemp.brand = liTemp.attr('brand'); //objTemp.carBrandName = objTemp.brand + liTemp.children('span').text(); objTemp.carBrandName = objTemp.brand + ' ' + liTemp.children('span').text(); result.push(objTemp); } }); if (flag1) { liTemp = $(this).parent('li'); objTemp = {}; objTemp.carBrandId = liTemp.attr('value'); objTemp.brand = liTemp.attr('brand'); objTemp.carBrandName = liTemp.children('span').text(); result.push(objTemp); } }); return result; } // 給目錄樹綁定點擊事件 $(document).on('click', '#resourceId li', function (e) { e.stopPropagation(); if ($(this).attr('open')) { $(this).removeAttr('open'); $(this).children('ul').hide(); } else { $(this).attr('open', 'opened'); $(this).children('ul').show(); } var objId = $(this).attr('id'); var carBrandId = $(this).attr('value'); //加載過的不執行 if ($(this).attr('data-load')) { return; } loadSubMenu(objId, carBrandId); }); // 點擊多選框時候不下拉 $(document).on('click', 'input[type="checkbox"]', function (e) { e.stopPropagation(); }); window.CarTree = CarTree; }()); 

調用方法:

carTree = new CarTree(false, {}, function (data) {console.log(data);});

以上所述是小編給大家介紹的BootStrap實現樹形目錄組件代碼詳解的相關知識,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品电影久久久| 国产精品久久久久久久9999| 亚洲视频国产视频| 中文字幕欧美在线| 国产午夜一区二区| 7777精品久久久久久| 久久99精品久久久久久噜噜| 久久人人爽亚洲精品天堂| 国产精品久久久久久久7电影| 4438全国亚洲精品在线观看视频| 亚洲成人av在线| 久久久91精品| 7m第一福利500精品视频| 日本国产欧美一区二区三区| 欧美性生交xxxxxdddd| 久久久久一本一区二区青青蜜月| 亚洲第一免费播放区| 91av在线影院| 国外视频精品毛片| 久久亚洲精品中文字幕冲田杏梨| 国产午夜精品美女视频明星a级| 日韩av在线免费| 欧美激情在线有限公司| 成人国产精品久久久久久亚洲| 欧美人与性动交a欧美精品| 亚洲午夜小视频| 第一福利永久视频精品| 国产欧美久久一区二区| 欧美国产激情18| 日韩黄色av网站| 成人黄色在线免费| 日韩欧美中文字幕在线播放| 国产精品一区二区电影| 久久综合九色九九| 亚洲一级免费视频| 成人综合网网址| 91精品国产综合久久久久久久久| xxxx欧美18另类的高清| 久久久久久国产免费| 精品久久久久久国产| 久久久视频免费观看| 欧美日韩爱爱视频| 91在线网站视频| 国产精品久久久久久亚洲影视| 久久久精品一区二区| 久久综合久久美利坚合众国| 亚洲人成在线免费观看| 乱亲女秽乱长久久久| 欧美亚洲另类制服自拍| 日韩精品www| 伊是香蕉大人久久| 国产精品自拍偷拍视频| 国内精品小视频在线观看| 成人免费大片黄在线播放| 国产91精品久久久| 热久久美女精品天天吊色| 国产国语videosex另类| 日韩精品视频在线观看免费| 国产亚洲精品久久久| 精品福利免费观看| 欧美又大又硬又粗bbbbb| 日韩欧美在线观看视频| 91精品视频免费观看| 青草青草久热精品视频在线观看| 国产97在线|日韩| 国产亚洲xxx| 一区二区三区四区在线观看视频| 亚洲美女激情视频| 国产在线观看精品一区二区三区| 久久久综合免费视频| 91av网站在线播放| 国产丝袜一区二区三区免费视频| 色香阁99久久精品久久久| 日韩视频亚洲视频| 精品在线欧美视频| 日韩在线观看电影| 久久99热这里只有精品国产| 38少妇精品导航| 日韩欧美在线免费| 国产一区二区三区在线播放免费观看| 国产精品国模在线| 亚洲香蕉在线观看| 夜夜嗨av一区二区三区免费区| 91老司机精品视频| 成人精品一区二区三区电影黑人| 亚洲国产精品小视频| 日韩欧亚中文在线| 欧美激情videos| 亚洲视频一区二区三区| 国产日韩欧美一二三区| 国自产精品手机在线观看视频| 日韩中文有码在线视频| 国产精品丝袜高跟| www国产精品com| 日韩av一区在线观看| 亚洲午夜久久久影院| 久久精品99无色码中文字幕| 欧美二区乱c黑人| 国产精品∨欧美精品v日韩精品| 欧美裸体视频网站| 国产精品女视频| 欧美国产日韩xxxxx| 欧美日韩国产一区二区| 欧美日韩国产在线看| 久久久久久久久中文字幕| 国产精品国内视频| 亚洲跨种族黑人xxx| 国产亚洲精品一区二555| 欧美一区二区三区……| 深夜福利日韩在线看| 亚洲成人aaa| 国产免费观看久久黄| 国产精品人人做人人爽| 国产精品久久久久久久久久| 久久人人看视频| 久久久久久有精品国产| 国产精品草莓在线免费观看| 久久人人爽人人爽人人片亚洲| 欧美亚洲一级片| 久久综合久久八八| 国产香蕉一区二区三区在线视频| 日韩中文字幕视频| 国产+成+人+亚洲欧洲| 精品国产美女在线| 国产精品视频资源| 91免费看片在线| 国产精品老女人精品视频| 一二美女精品欧洲| 欧美人在线视频| 久久久久久久久久久av| 久久色精品视频| 亚洲美女免费精品视频在线观看| 亚洲人成电影网站色…| 亚洲乱亚洲乱妇无码| 欧美野外猛男的大粗鳮| 欧美疯狂性受xxxxx另类| 日韩精品极品在线观看播放免费视频| 国产精品老女人视频| 欧美韩国理论所午夜片917电影| 国产成人精品日本亚洲| 秋霞成人午夜鲁丝一区二区三区| 国产精品美腿一区在线看| 国产精品免费在线免费| 亚洲精品理论电影| 91免费视频网站| 国产91精品网站| 久久国产精品影视| www国产91| 国产精品久久久久久av福利| 成人精品一区二区三区电影免费| 欧美最猛性xxxxx(亚洲精品)| 91九色综合久久| 久久久久久久久网站| 日韩欧美一区二区在线| 最新国产精品拍自在线播放| 亚洲欧美视频在线| 国产99在线|中文| 国内精久久久久久久久久人| 亚洲欧美制服另类日韩| 91在线观看免费高清| 久久精品美女视频网站| 亚洲国产精品高清久久久| 久久777国产线看观看精品| 欧美亚洲第一区|