dede5.6联动模型一级二级自适应~

dede5.6联动模型一级二级自适应~

解决自定义内容模型中,联动类型只有一级分类时也会出现两个下来菜单的问题,目的在于改善用户体验.
因为普通用户使用时会看到两个下来菜单,即使只有一个菜单有效时,还是有很多用户认为第二个下拉菜单里也需要选择,但是什么也点不出来就一直在那里等待.

效果:

同时提供一个完整文件下载. 请覆盖 /images/ 目录下的同名文件.

文件名 enums.js
修改部分已经做了标注.

  1. <!–
  2. // jim.ma QQ:164186 jim.mail@163.com www.itfly.com
  3. // 2010-12-05 DedeCMS5.6 一级二级菜单自动适应
  4. //选择地区的二级分类(非通用调用)
  5. function selNext(oj, v)
  6. {
  7.     var newobj = oj.options;
  8.     var selv = parseInt(v);
  9.     var maxv = parseInt(v) + 500;
  10.     while(newobj.length > 0) {
  11.         oj.remove(0);
  12.     }
  13.     clear(oj);
  14.     if(selv==0)
  15.     {
  16.         aOption = document.createElement(‘OPTION’);
  17.         aOption.text = ‘具体地区’;
  18.         aOption.value = ‘0’;
  19.         oj.options.add(aOption);
  20.         return;
  21.     }
  22.     else
  23.     {
  24.         aOption = document.createElement(‘OPTION’);
  25.         aOption.text = ‘具体地区’;
  26.         aOption.value = ‘0’;
  27.         oj.options.add(aOption);
  28.     }
  29.     var str = ”;
  30.     for(i=selv+1; i < maxv; i++)
  31.     {
  32.         if(!em_nativeplaces[i]) continue;
  33.         aOption = document.createElement(‘OPTION’);
  34.         aOption.text = em_nativeplaces[i];
  35.         aOption.value = i;
  36.         oj.options.add(aOption);
  37.     }
  38. }
  39. //子类改变事件
  40. function ChangeSon()
  41. {
  42.     var emname = this.name.replace(‘_son’, ”);
  43.     var topSelObj = document.getElementById(emname+’_top’);
  44.     if(this.options[this.selectedIndex].value==0) {
  45.         document.getElementById(‘hidden_’+emname).value = topSelObj.options[topSelObj.selectedIndex].value;
  46.     }
  47.     else {
  48.         document.getElementById(‘hidden_’+emname).value = this.options[this.selectedIndex].value;
  49.     }
  50. }
  51. //顶级类改变事件
  52. function selNextSon()
  53. {
  54.     var emname = this.name.replace(‘_top’, ”);
  55.     if( document.getElementById(emname+’_son’) )
  56.     {
  57.         var oj = document.getElementById(emname + ‘_son’);
  58.     }
  59.     else
  60.     {
  61.         var oj  = document.createElement(‘select’);
  62.         oj.name = emname + ‘_son’;
  63.         oj.id   = emname + ‘_son’;
  64.         oj.onchange = ChangeSon;
  65.     }
  66.     var v = this.options[this.selectedIndex].value;
  67.     document.getElementById(‘hidden_’+emname).value = v;
  68.     var newobj = oj.options;
  69.     var selarr = eval(’em_’+emname+’s’);
  70.     var selv = parseInt(v);
  71.     var maxv = parseInt(v) + 500;
  72.     while(newobj && newobj.length > 0) oj.remove(0);
  73.     clear(oj);
  74.     if(selv==0)
  75.     {
  76.         aOption = document.createElement(‘OPTION’);
  77.         aOption.text = ‘请选择..’;
  78.         aOption.value = ‘0’;
  79.         oj.options.add(aOption);
  80.         return;
  81.     }
  82.     else
  83.     {
  84.         aOption = document.createElement(‘OPTION’);
  85.         aOption.text = ‘请选择..’;
  86.         aOption.value = ‘0’;
  87.         oj.options.add(aOption);
  88.     }
  89.     var str = ”;
  90.     for(i=selv+1; i < maxv; i++)
  91.     {
  92.         if(!selarr[i]) continue;
  93.         aOption = document.createElement(‘OPTION’);
  94.         aOption.text = selarr[i];
  95.         aOption.value = i;
  96.         oj.options.add(aOption);
  97.     }
  98.     document.getElementById(‘span_’+emname+’_son’).appendChild(oj);
  99. }
  100. //————————————-by jim.ma 一级菜单响应
  101. function selNextSon1()
  102. {
  103.     var emname = this.name.replace(‘_top’, ”);
  104.     var v = this.options[this.selectedIndex].value;
  105.     document.getElementById(‘hidden_’+emname).value = v;
  106. }
  107. //————————————EOF
  108. //生成任意的两级选择框
  109. function MakeTopSelect(emname, selvalue)
  110. {
  111.     var selectFormHtml = ”;
  112.     var aOption = null;
  113.     var selObj = document.createElement(“select”);
  114.     selObj.name = emname + ‘_top’;
  115.     selObj.id   = emname + ‘_top’;
  116.     selObj.onchange = selNextSon;
  117.     var selarr = eval(’em_’+emname+’s’);
  118.     var topvalue = 0;
  119.     var sonvalue = 0;
  120.    
  121.     aOption = document.createElement(‘OPTION’);
  122.     aOption.text = ‘请选择..’;
  123.     aOption.value = 0;
  124.     selObj.options.add(aOption);
  125.     if(selvalue%500 == 0 ) {
  126.             topvalue = selvalue;
  127.     }
  128.     else {
  129.             sonvalue = selvalue;
  130.             topvalue = selvalue – (selvalue%500);
  131.     }
  132.    
  133.     var arrlen1=0;//————————————-by jim.ma
  134.     for(i=500; i<=selarr.length; i += 500)
  135.     {
  136.         if(!selarr[i]) continue;
  137.         aOption = document.createElement(‘OPTION’);
  138.         if(i == topvalue) {
  139.             aOption = document.createElement(‘OPTION’);
  140.             aOption.text = selarr[i];
  141.             aOption.value = i;
  142.             selObj.options.add(aOption);            
  143.             aOption.selected = true;
  144.         }
  145.         else {
  146.             aOption = document.createElement(‘OPTION’);
  147.             aOption.text = selarr[i];
  148.             aOption.value = i;
  149.             selObj.options.add(aOption);
  150.         }
  151.         arrlen1++;//————————————-by jim.ma
  152.     }
  153.     document.getElementById(‘span_’+emname).appendChild(selObj);
  154.    
  155.     //————————————-by jim.ma
  156.     var arrlen2 = 0 ;
  157.     for(tv in selarr){
  158.         arrlen2++;
  159.     }
  160.     if(arrlen1 == arrlen2){
  161.         selObj.onchange = selNextSon1;
  162.         return ;
  163.     }
  164.     //————————————-EOF
  165.     //如果子类存在值,创建子类
  166.     //if(sonvalue > 0 || topvalue > 0) {
  167.     selObj = document.createElement(“select”);
  168.     selObj.name = emname + ‘_son’;
  169.     selObj.id   = emname + ‘_son’;
  170.     selObj.onchange = ChangeSon;
  171.     aOption = document.createElement(‘OPTION’);
  172.     aOption.text = ‘请选择..’;
  173.     aOption.value = 0;
  174.     selObj.options.add(aOption);
  175.     //当大类有值输出子类
  176.     if(topvalue > 0)
  177.     {
  178.             var selv = topvalue;
  179.         var maxv = parseInt(topvalue) + 500;
  180.             for(i=selv+1; i < maxv; i++)
  181.             {
  182.                 if(!selarr[i]) continue;
  183.                 aOption = document.createElement(‘OPTION’);
  184.                 if(i == sonvalue) {
  185.                     aOption = document.createElement(‘OPTION’);
  186.                     aOption.text = selarr[i];
  187.                     aOption.value = i;
  188.                     selObj.options.add(aOption);
  189.                     aOption.selected = true;
  190.                 }
  191.                 else {
  192.                     aOption = document.createElement(‘OPTION’);
  193.                     aOption.text = selarr[i];
  194.                     aOption.value = i;
  195.                     selObj.options.add(aOption);
  196.                 }
  197.             }
  198.     }
  199.     document.getElementById(‘span_’+emname+’_son’).appendChild(selObj);
  200. }
  201. //清除旧对象
  202. function clear(o)
  203. {
  204.     l=o.length;
  205.     for (i = 0; i< l; i++){
  206.         o.options[1]=null;
  207.     }
  208. }
  209. –>

复制代码

by jim.ma  2010年12月6日
EOF—————————————————————

留下回复