Macros

给我一支烟!请所有烦恼都能过往如云烟!

导航

使用prototype.js实现多级级联菜单

最近因为业务需要,要完成一个多级的级联菜单,本来在网上找一找,但是没有找到自己满足的。于是自己写了一个。放在blog里以备不时之需,也可以帮助有需要的朋友:)
prototype.js下载地址如下:
http://www.prototypejs.org/
完成代码如下:
<html>
<head>
  <title>AJAX联动页面</title>
  <script src="script/prototype.js"></script>
</head>
<body>

上网时长:<span id="times"></span>
包月类型:<span id="types"></span>
带宽(网速):<span id="bandwidth"></span>
消费档次:<span id="price"></span>

<script>
var WideBand = Class.create();
WideBand.prototype = {
 initialize:function() {},
 times:{
  '1':'10小时之内',
  '2':'10-30小时',
  '3':'30-80小时',
  '4':'80-120小时',
  '5':'120小时以上',
  '6':'不限时'
 },
 types:{
  '1':{
   '101':'包月限时'
  },
  '2':{
   '201':'包月限时'
  },
  '3':{
   '301':'包月限时'
  },
  '4':{
   '401':'包月限时'
  },
  '5':{
   '501':'包月限时'
  },
  '6':{
   '601':'包月不限时',
   '602':'包年不限时',
   '603':'寒、暑假不限时'
  }
 },
 bandwidth:{
  '101':{
   '10101':'512k',
   '10102':'1M',
   '10103':'1.5M'
  },
  '201':{
   '20101':'512k',
   '20102':'1M',
   '20103':'1.5M'
  },
  '301':{
   '30101':'512k',
   '30102':'1M',
   '30103':'1.5M以上'
  },
  '401':{
   '40101':'1M',
   '40102':'1M以上'
  },
  '501':{
   '50101':'1M',
   '50102':'1.5M以上'
  },
  '601':{
   '60101':'512K',
   '60102':'1M',
   '60103':'1.5M以上',
   '60104':'2M及以上'
  },
  '602':{
   '60201':'512K',
   '60202':'1M',
   '60203':'1.5M以上',
   '60204':'2M及以上'
  },
  '603':{
      '60301':'512K',
   '60302':'1M'
  }
 },
 price:{
  '10101':{
   '1':'10元以下',
   '2':'10-30元',
   '3':'30元以上'
  },
  '10102':{
   '1':'10元以下',
   '2':'10-30元',
   '3':'30元以上'
  },
  '10103':{
   '1':'10元以下',
   '2':'10-30元',
   '3':'30元以上'
  },
  '20101':{
   '1':'10元以下',
   '2':'10-30元',
   '3':'30元以上'
  },
  '20102':{
   '1':'10元以下',
   '2':'10-30元',
   '3':'30元以上'
  },
  '20103':{
   '1':'10-30元',
   '2':'30元以上'
  },
  '30101':{
   '1':'30元以下',
   '2':'30-50元',
   '3':'50-80元',
   '4':'80元以上'
  },
  '30102':{
   '1':'30元以下',
   '2':'30-50元',
   '3':'50-80元',
   '4':'80元以上'
  },
  '30103':{
   '1':'30元以下',
   '2':'30-50元',
   '3':'60-80元',
   '4':'80元以上'
  },
  '40101':{
   '1':'40元以下',
   '2':'40-60元',
   '3':'60-80元',
   '4':'80元以上'
  },
  '40102':{
   '1':'40元以下',
   '2':'40-60元',
   '3':'60-90元',
   '4':'90元以上'
  },
  '50101':{
   '1':'80元以下',
   '2':'80-110元',
   '3':'110元以上'
  },
  '50102':{
   '1':'110元以下',
   '2':'110-130元',
   '3':'130元以上'
  },
  '60101':{
   '1':'40元以下',
   '2':'40-50元',
   '3':'50元以上'
  },
  '60102':{
   '1':'70元以下',
   '2':'70-90元',
   '3':'90-120元',
   '4':'120元以上'
  },
  '60103':{
   '1':'90元以下',
   '2':'90-120元',
   '3':'120-150元',
   '4':'150元以上'
  },
  '60104':{
   '1':'120元以下',
   '2':'120-160元',
   '3':'160-200元'
  },
  '60201':{
   '1':'400元以下',
   '2':'400-500元',
   '3':'500元以上'
  },
  '60202':{
   '1':'800元以下',
   '2':'800-900元',
   '3':'900-1100元'
  },
  '60203':{
   '1':'1000元以下',
   '2':'1000-1200元',
   '3':'1200-1300元'
  },
  '60204':{
   '1':'1300元以下',
   '2':'1300-1600元',
   '3':'1600元以上'
  },
  '60301':{
   '1':'200-250元',
   '2':'250-300元'
  },
  '60302':{
   '1':'250-350元',
   '2':'350-400元'
  }
 }
 
};
var bw = new WideBand();
//显示times
function showTimes()
{
 var result = '<select id="selectTimes" onchange="showTypes()">';
 for( time in bw.times )
 {
  result += '<option value="'+ time +'">'+ bw.times[time] +'</option>';
 }
 result += '</select>';
 $('times').innerHTML = result;
 showTypes();
}
//显示type
function showTypes()
{
 var time = $('selectTimes').value;
 var result = '<select id="selectTypes" onchange="showBandwidth()">';
 for( type in bw.types[time] )
 {
  result += '<option value="'+ type +'">'+ bw.types[time][type] +'</option>';
 }
 result += '</select>';
 $('types').innerHTML = result;
 showBandwidth();
}

//显示bandwidth
function showBandwidth()
{
 var type = $('selectTypes').value;
 var result = '<select id="selectBandwidth" onchange="showPrice()">';
 for( bwidth in bw.bandwidth[type] )
 {
  result += '<option value="'+ bwidth +'">'+ bw.bandwidth[type][bwidth] +'</option>';
 }
 result += '</select>';
 $('bandwidth').innerHTML = result;
 showPrice();
}

//显示price
function showPrice()
{
 var bandwidth = $('selectBandwidth').value;
 var result = '<select id="selectPrice">';
 for( p in bw.price[bandwidth] )
 {
  result += '<option value="'+ p +'">'+ bw.price[bandwidth][p] +'</option>';
 }
 result += '</select>';
 $('price').innerHTML = result;
}

showTimes();
</script>

</body>
</html>

以上代码我就不多做解释了。你只要认真的看一下都能看懂。总之prototype.js是一个非常优雅的javascript基础类库,对javascript做了大量的扩展,而且很好的支持Ajax,而且有很高的学习价值,所以我强烈建议B/S开发人员和对JavaScript开发感兴趣的朋友去浏览一些它的源代码.

posted on 2007-10-18 09:41  Macros  阅读(1117)  评论(1)    收藏  举报