[jQuery]select無限聯動-使用json數據
在許多購物網站都經常會看到聯動選單,這讓我很好奇到底該怎麼實現呢??於是爬了很多文章,卻發現似乎很少無限聯動的,大多是二層聯動、三層聯動,或者是非常複雜的無限聯動,實在讓我不理解阿~~~所以只好自己動手做啦!! 哈哈(做的不是很好)
無限聯動原理:
以json作為數據源,當select改變時,以jQuery判斷條件加載下一層子分類。
這個範例目前是純前端的,若要跟PHP搭配也是可以的,只要將所需的資料輸出成json格式即可!!
HTML部分
1 2 3 |
<select name="pCat" id="pCat" class="pCat" size="2"></select> <div class="selectCategory" ></div> </div> |
Javascript部分
引入jQuery
1 |
<script src="http://code.jquery.com/jquery-1.9.1.js"></script> |
json數據源
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
var category = [{ "id" : "1", "name" : "PC電腦", "parent" : "0", }, { "id" : "2", "name" : "NB電腦", "parent" : "0", }, { "id" : "3", "name" : "ACER桌電", "parent" : "1", }, { "id" : "4", "name" : "ACER筆電", "parent" : "2", }, { "id" : "5", "name" : "i7戰鬥版", "parent" : "3", }, { "id" : "6", "name" : "ASUS桌電", "parent" : "1", }]; |
jQuery聯動主程式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
//主選單 $('#pCat').append('<option value="none" selected="selected">請選擇分類</option>'); $.each(category, function(index, article) { if (category[index].parent == 0) { $('#pCat').append('<option value="' + category[index].id + '">' + category[index].name + '</option>'); } }); $(document).on('change', '.pCat', function() { //選擇的值 var cat_select = $(this).val(); //var cat_dep=$(this).attr('categorydep'); //選擇的層級 //選擇的層級 var cat_dep = $(".pCat").index(this); //清除子分類 $(".pCat").each(function(i, obj) { if (cat_dep < i) { $(this).remove(); } }); //所有的層級總數 var cat_totdep = $('.pCat').length; //新增子分類層 $('.selectCategory').append('<select class="pCat" id="pCat' + cat_totdep + '" size="2"><option value="none" >請選擇分類</option></select>'); //計算子分類初值 var child_count=0; //新增子分類選項 $.each(category, function(index, article) { if (category[index].parent == cat_select) { child_count+=1; $('#pCat' + cat_totdep).append('<option value="' + category[index].id + '">' + category[index].name + '</option>'); } }); //移除沒有子分類選項的子分類層 if(child_count==0){ $('#pCat' + cat_totdep).remove(); } }); |
實例測試:
完整代碼:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
<script> $(document).ready(function() { var category = [{ "id" : "1", "name" : "PC電腦", "parent" : "0", }, { "id" : "2", "name" : "NB電腦", "parent" : "0", }, { "id" : "3", "name" : "ACER桌電", "parent" : "1", }, { "id" : "4", "name" : "ACER筆電", "parent" : "2", }, { "id" : "5", "name" : "i7戰鬥版", "parent" : "3", }, { "id" : "6", "name" : "ASUS桌電", "parent" : "1", }]; //產生主選單 $('#pCat').append('<option value="none" selected="selected">請選擇分類</option>'); $.each(category, function(index, article) { if (category[index].parent == 0) { $('#pCat').append('<option value="' + category[index].id + '">' + category[index].name + '</option>'); } }); //選擇分類時,產生連動 $(document).on('change', '.pCat', function() { //選擇的值 var cat_select = $(this).val(); //var cat_dep=$(this).attr('categorydep'); //選擇的層級 //選擇的層級 var cat_dep = $(".pCat").index(this); //清除子分類 $(".pCat").each(function(i, obj) { if (cat_dep < i) { $(this).remove(); } }); //所有的層級總數 var cat_totdep = $('.pCat').length; //新增子分類層 $('.selectCategory').append('<select class="pCat" id="pCat' + cat_totdep + '" size="2"><option value="none" >請選擇分類</option></select>'); //計算子分類初值 var child_count=0; //新增子分類選項 $.each(category, function(index, article) { if (category[index].parent == cat_select) { child_count+=1; $('#pCat' + cat_totdep).append('<option value="' + category[index].id + '">' + category[index].name + '</option>'); } }); //移除沒有子分類選項的子分類層 if(child_count==0){ $('#pCat' + cat_totdep).remove(); } }); }); </script> |
這個無限聯動雖然會工作,但肯定還是有些bug存在啦~~先這樣以後再改啦!!
最後的最後,難得Aidec自己克服惰性,原創了一段小程式,所以要引用請註明來源出處ㄚㄚㄚㄚ!!!! 謝謝啦
很抱歉,此文章關閉留言