shawl.qiu javascript 表单列表框联动类 v1.0 (支持无限级联动)
说明:
其实老早就写了几个联动的菜单, 但移植性不好...
也发现联动菜单的用处真是蛮多的, 所以就花一天时间写这个列表框类,
可以很容易的移植.
功能:
* 支持无限级联动
* 支持自定义默认选中项
* 支持自动根据 URL 查询ID 显示列表框项
联动字串格式为:
value 定界符 text 定界符 分隔符
每一个 value 定界符 text 定界符 对应一个 select 列表项
每一个分隔符对应一行数据库数据.
这个我不细说了, 看演示就行了, 鄙人弄了二级,三级,四级 的联动演示, 应该够清楚了.
提示:
从数据库生成字串可以使用 recordset 的 GetString() 函数.
如 ASP VBScript:
- <%
- set rs=createObject("adodb.recordset")
- rs.open "select gcid, gcat, gscid, gscat from v_page_manage_glossary_cat",conn, 1
- Response.write("var str='"&rs.GetString(2,-1,"##","##@","empty...")&"'"&chr(13))
- rs.close
- set rs=nothing
- %>
目录:
1. shawl.qiu javascript 表单列表框联动类 v1.0
1.1 二级联动演示
1.2 三级联动演示
1.3 四级联动演示
2. 附 : Jscript 生成联动内容
shawl.qiu
2006-12-29
http://blog.csdn.net/btbtd
1. shawl.qiu javascript 表单列表框联动类 v1.0
1.1 二级联动演示
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>shawl.qiu template</title>
- <script type="text/javascript">
- //<![CDATA[
- var str='1##cat 1##11##11cat ##@1##cat 1##12##12cat ##@1##cat 1##13##13cat ##@2##cat 2##21##21cat ##@2##cat 2##22##22cat ##@2##cat 2##23##23cat ##@3##cat 3##31##31cat ##@3##cat 3##32##32cat ##@3##cat 3##33##33cat ##@';
- onload=function(){
- var sle=new cFormSelect();
- sle.source=str; // 源字串
- sle.delimiter='##'; // 列定界符
- sle.marker='@'; // 行分隔符
- sle.idBase='level'; // 标签 ID 标准字串, 如: id1, id2. 其中的 id 就是基准字符.
- sle.defaultSelect='2,21'; // 默认选中项, 以值为准: 如 2,21,211. 请不要带空格.
- sle.queryString='id,idsub'; // URL 栏查询串, 根据 URL 查询 ID 自动选中列表框项.
- sle.getItem(); // 执行本程序
- sle=null;
- }
- /*-----------------------------------------------------------------------------------*/
- * shawl.qiu javascript 表单列表框联动类 v1.0
- /*-----------------------------------------------------------------------------------*/
- //---------------------------------begin class cFormSelect()-------------------------------//
- function cFormSelect(){ // shawl.qiu code
- //------------------------------------begin public variable
- //---------------begin about
- this.auSubject='shawl.qiu javascript 表单列表框联动类';
- this.auVersion='1.0';
- this.au='shawl.qiu';
- this.auEmail='shawl.qiu@gmail.com';
- this.auBlog='http://blog.csdn.net/btbtd';
- this.auCreateDate='2006-12-28';
- //---------------end about
- this.source=''; // 源字串
- this.delimiter='#'; // 列定界符
- this.marker='@'; // 行分隔符
- this.idBase='level'; // 标签 ID 基准字串
- this.defaultSelect=''; // 默认选中, 格式: 值,值,值...
- this.queryString=''; // URL 查询ID
- this.item=0;
- this.count=1;
- //------------------------------------end public variable
- //------------------------------------begin public method
- this.getItem=function(){
- var sLcaStr=location.search;
- if(sLcaStr!=''){
- var arTemp=[];
- if(tl.queryString!=''){
- tl.queryString.replace(/(.+?)(/,|$)/g,function($0,$1){
- var re=new RegExp($1+'/=([^/&/=]+)');
- sLcaStr.replace(re,function($0,$1){
- arTemp[arTemp.length]=$1;
- });
- re=null;
- });
- tl.defaultSelect=arTemp.join(',');
- } // end if 2
- } // end if 1
- tl.item=fCkLevel(tl.source, tl.delimiter, tl.marker);
- fCreateOption(tl.source);
- } // end this.getItem
- this.onchange=function(oSle){
- var nId=oSle.id.replace(tl.idBase,'');
- tl.count=nId;
- fSelectOpt(tl.count);
- } // end this.onchange
- //------------------------------------end public method
- //------------------------------------begin private variable
- var tl=this;
- //------------------------------------end private variable
- //------------------------------------begin private method
- function fSelectOpt(nPsti){
- nPsti-=0;
- var sOpt='';
- var sTemp=''
- for(var i=nPsti; i<nPsti+1; i++){
- try{
- var n_psti=i+1;
- var oSle=document.getElementById(tl.idBase+n_psti);
- oSle.length=0;
- } catch(e){return false; }
- var oSleTemp=document.getElementById(tl.idBase+nPsti);
- sOpt+=oSleTemp.options[oSleTemp.options.selectedIndex].value;
- sOpt+=tl.delimiter;
- sOpt+=oSleTemp.options[oSleTemp.options.selectedIndex].innerHTML;
- sOpt+=tl.delimiter;
- oSleTemp=null;
- var oRe=new RegExp(sOpt+'(.*?'+tl.delimiter+'.*?'
- +tl.delimiter+')(.*?'+tl.marker+')','gi');
- tl.source.replace(oRe, function($0, $1, $2){
- sTemp+=$1;
- return $2;
- });
- sTemp=fStrClearRepeat(sTemp, tl.delimiter);
- var oRe=new RegExp('(.*?)'+tl.delimiter+'(.*?)'+tl.delimiter, 'gi');
- sTemp.replace(oRe,
- function($0, $1, $2){
- if(fGoSelect(tl.item, tl.defaultSelect, $1)){
- oSle.options[oSle.length]=new Option($2, $1, true, true);
- } else oSle.options[oSle.length]=new Option($2, $1);
- });
- oSle=null;
- } // end for 1
- try{ arguments.callee(nPsti+1) } catch(e){}
- } // end function fGoSelect
- function fGetOptStr(nCount, sDelimiter){
- if(nCount<=1)return false;
- var sTemp='';
- for(var i=1; i<nCount; i++){
- var oSlePrnt=document.getElementById(tl.idBase+i);
- sTemp+=oSlePrnt.options[oSlePrnt.options.selectedIndex].value;
- sTemp+=sDelimiter;
- sTemp+=oSlePrnt.options[oSlePrnt.options.selectedIndex].innerHTML;
- sTemp+=sDelimiter;
- oSlePrnt=null;
- } // end for
- return sTemp;
- } // end function fGetOptStr(nCount, sDelimiter)
- function fCreateOption(sStr){
- if(tl.count>tl.item)return false;
- var oSle=document.getElementById(tl.idBase+tl.count);
- oSle.onchange=function(){
- tl.onchange(this);
- }
- var sText='';
- var sValue='';
- var sTemp='';
- if(tl.count==1){
- var oRe=new RegExp('(.*?'+tl.delimiter+'.*?'+tl.delimiter+')(.*?'+tl.marker+')','gi');
- sStr=sStr.replace(oRe, function($0, $1, $2){
- sTemp+=$1;
- return $2;
- });
- } else {
- var sOpt=fGetOptStr(tl.count, tl.delimiter);
- var oRe=new RegExp(sOpt+'(.*?'+tl.delimiter+'.*?'
- +tl.delimiter+')(.*?'+tl.marker+')','gi');
- tl.source.replace(oRe, function($0, $1, $2){
- sTemp+=$1;
- return $2;
- });
- } //end else 1
- sTemp=fStrClearRepeat(sTemp, tl.delimiter);
- var oRe=new RegExp('(.*?)'+tl.delimiter+'(.*?)'+tl.delimiter, 'gi');
- sTemp.replace(oRe,
- function($0, $1, $2){
- if(fGoSelect(tl.count, tl.defaultSelect, $1)){
- oSle.options[oSle.length]=new Option($2, $1, true, true);
- } else oSle.options[oSle.length]=new Option($2, $1);
- });
- oSle=null;
- tl.count++;
- arguments.callee(sStr);
- } // end function fCreateOption(sStr);
- function fGoSelect(nPsti, sSle, sForCmp){
- if(sSle=='')return false;
- sSle=sSle.split(',');
- if(sSle[nPsti-1]==sForCmp) return true;
- return false;
- } // end function fGoSelect(nPsti, sSle, sForCmp)
- function fCkLevel(sSrc, sDelimiter,sMarker){
- var num=0;
- var re=new RegExp('(.*?)'+sMarker);
- var re_=new RegExp(sDelimiter, 'g');
- sSrc.replace(re,function($0,$1){
- $1.replace(re_, function(m){
- num++;
- });
- });
- return num/2;
- } // end fCkLevel(sSrc, sDelimiter,sMarker);
- function fStrClearRepeat(sStr, sDelimiter){
- var iStr='';
- var re=new RegExp('.*?'+sDelimiter+'.*?'+sDelimiter, 'gi');
- sStr=sStr.replace(re,function(m){
- if(iStr.indexOf(m)==-1)
- iStr+=m;
- return '';
- });
- return iStr; // shawl.qiu code
- } // end function fStrClearRepeat(sStr, sDelimiter);
- //------------------------------------end private method
- } // shawl.qiu code
- //---------------------------------end class cFormSelect()---------------------------------//
- //]]>
- </script>
- </head>
- <body>
- <select name='super' id='level1'></select>
- <select name='sub' id='level2'></select>
- <br/><a href="?">back</a><br/>
- <a href="?id=1&idsub=12">id=1&idsub=12</a><br/>
- <a href="?id=2&idsub=21">id=2&idsub=21</a><br/>
- <a href="?id=3&idsub=32">id=3&idsub=32</a><br/>
- </body>
- </html>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>shawl.qiu template</title>
- <script type="text/javascript">
- //<![CDATA[
- var str='1##cat 1##11##11cat ##111##111cat ##@1##cat 1##11##11cat ##112##112cat ##@1##cat 1##11##11cat ##113##113cat ##@1##cat 1##12##12cat ##121##121cat ##@1##cat 1##12##12cat ##122##122cat ##@1##cat 1##12##12cat ##123##123cat ##@1##cat 1##13##13cat ##131##131cat ##@1##cat 1##13##13cat ##132##132cat ##@1##cat 1##13##13cat ##133##133cat ##@2##cat 2##21##21cat ##211##211cat ##@2##cat 2##21##21cat ##212##212cat ##@2##cat 2##21##21cat ##213##213cat ##@2##cat 2##22##22cat ##221##221cat ##@2##cat 2##22##22cat ##222##222cat ##@2##cat 2##22##22cat ##223##223cat ##@2##cat 2##23##23cat ##231##231cat ##@2##cat 2##23##23cat ##232##232cat ##@2##cat 2##23##23cat ##233##233cat ##@3##cat 3##31##31cat ##311##311cat ##@3##cat 3##31##31cat ##312##312cat ##@3##cat 3##31##31cat ##313##313cat ##@3##cat 3##32##32cat ##321##321cat ##@3##cat 3##32##32cat ##322##322cat ##@3##cat 3##32##32cat ##323##323cat ##@3##cat 3##33##33cat ##331##331cat ##@3##cat 3##33##33cat ##332##332cat ##@3##cat 3##33##33cat ##333##333cat ##@';
- onload=function(){
- var sle=new cFormSelect();
- sle.source=str; // 源字串
- sle.delimiter='##'; // 列定界符
- sle.marker='@'; // 行分隔符
- sle.idBase='level'; // 标签 ID 标准字串, 如: id1, id2. 其中的 id 就是基准字符.
- sle.defaultSelect='2,21,211'; // 默认选中项, 以值为准: 如 2,21,211. 请不要带空格.
- sle.queryString='id,idsub,idsub1'; // URL 栏查询串, 根据 URL 查询 ID 自动选中列表框项.
- sle.getItem(); // 执行本程序
- sle=null;
- }
- /*-----------------------------------------------------------------------------------*/
- * shawl.qiu javascript 表单列表框联动类 v1.0
- /*-----------------------------------------------------------------------------------*/
- //---------------------------------begin class cFormSelect()-------------------------------//
- function cFormSelect(){ // shawl.qiu code
- //------------------------------------begin public variable
- //---------------begin about
- this.auSubject='shawl.qiu javascript 表单列表框联动类';
- this.auVersion='1.0';
- this.au='shawl.qiu';
- this.auEmail='shawl.qiu@gmail.com';
- this.auBlog='http://blog.csdn.net/btbtd';
- this.auCreateDate='2006-12-28';
- //---------------end about
- this.source=''; // 源字串
- this.delimiter='#'; // 列定界符
- this.marker='@'; // 行分隔符
- this.idBase='level'; // 标签 ID 基准字串
- this.defaultSelect=''; // 默认选中, 格式: 值,值,值...
- this.queryString=''; // URL 查询ID
- this.item=0;
- this.count=1;
- //------------------------------------end public variable
- //------------------------------------begin public method
- this.getItem=function(){
- var sLcaStr=location.search;
- if(sLcaStr!=''){
- var arTemp=[];
- if(tl.queryString!=''){
- tl.queryString.replace(/(.+?)(/,|$)/g,function($0,$1){
- var re=new RegExp($1+'/=([^/&/=]+)');
- sLcaStr.replace(re,function($0,$1){
- arTemp[arTemp.length]=$1;
- });
- re=null;
- });
- tl.defaultSelect=arTemp.join(',');
- } // end if 2
- } // end if 1
- tl.item=fCkLevel(tl.source, tl.delimiter, tl.marker);
- fCreateOption(tl.source);
- } // end this.getItem
- this.onchange=function(oSle){
- var nId=oSle.id.replace(tl.idBase,'');
- tl.count=nId;
- fSelectOpt(tl.count);
- } // end this.onchange
- //------------------------------------end public method
- //------------------------------------begin private variable
- var tl=this;
- //------------------------------------end private variable
- //------------------------------------begin private method
- function fSelectOpt(nPsti){
- nPsti-=0;
- var sOpt='';
- var sTemp=''
- for(var i=nPsti; i<nPsti+1; i++){
- try{
- var n_psti=i+1;
- var oSle=document.getElementById(tl.idBase+n_psti);
- oSle.length=0;
- } catch(e){return false; }
- var oSleTemp=document.getElementById(tl.idBase+nPsti);
- sOpt+=oSleTemp.options[oSleTemp.options.selectedIndex].value;
- sOpt+=tl.delimiter;
- sOpt+=oSleTemp.options[oSleTemp.options.selectedIndex].innerHTML;
- sOpt+=tl.delimiter;
- oSleTemp=null;
- var oRe=new RegExp(sOpt+'(.*?'+tl.delimiter+'.*?'
- +tl.delimiter+')(.*?'+tl.marker+')','gi');
- tl.source.replace(oRe, function($0, $1, $2){
- sTemp+=$1;
- return $2;
- });
- sTemp=fStrClearRepeat(sTemp, tl.delimiter);
- var oRe=new RegExp('(.*?)'+tl.delimiter+'(.*?)'+tl.delimiter, 'gi');
- sTemp.replace(oRe,
- function($0, $1, $2){
- if(fGoSelect(tl.item, tl.defaultSelect, $1)){
- oSle.options[oSle.length]=new Option($2, $1, true, true);
- } else oSle.options[oSle.length]=new Option($2, $1);
- });
- oSle=null;
- } // end for 1
- try{ arguments.callee(nPsti+1) } catch(e){}
- } // end function fGoSelect
- function fGetOptStr(nCount, sDelimiter){
- if(nCount<=1)return false;
- var sTemp='';
- for(var i=1; i<nCount; i++){
- var oSlePrnt=document.getElementById(tl.idBase+i);
- sTemp+=oSlePrnt.options[oSlePrnt.options.selectedIndex].value;
- sTemp+=sDelimiter;
- sTemp+=oSlePrnt.options[oSlePrnt.options.selectedIndex].innerHTML;
- sTemp+=sDelimiter;
- oSlePrnt=null;
- } // end for
- return sTemp;
- } // end function fGetOptStr(nCount, sDelimiter)
- function fCreateOption(sStr){
- if(tl.count>tl.item)return false;
- var oSle=document.getElementById(tl.idBase+tl.count);
- oSle.onchange=function(){
- tl.onchange(this);
- }
- var sText='';
- var sValue='';
- var sTemp='';
- if(tl.count==1){
- var oRe=new RegExp('(.*?'+tl.delimiter+'.*?'+tl.delimiter+')(.*?'+tl.marker+')','gi');
- sStr=sStr.replace(oRe, function($0, $1, $2){
- sTemp+=$1;
- return $2;
- });
- } else {
- var sOpt=fGetOptStr(tl.count, tl.delimiter);
- var oRe=new RegExp(sOpt+'(.*?'+tl.delimiter+'.*?'
- +tl.delimiter+')(.*?'+tl.marker+')','gi');
- tl.source.replace(oRe, function($0, $1, $2){
- sTemp+=$1;
- return $2;
- });
- } //end else 1
- sTemp=fStrClearRepeat(sTemp, tl.delimiter);
- var oRe=new RegExp('(.*?)'+tl.delimiter+'(.*?)'+tl.delimiter, 'gi');
- sTemp.replace(oRe,
- function($0, $1, $2){
- if(fGoSelect(tl.count, tl.defaultSelect, $1)){
- oSle.options[oSle.length]=new Option($2, $1, true, true);
- } else oSle.options[oSle.length]=new Option($2, $1);
- });
- oSle=null;
- tl.count++;
- arguments.callee(sStr);
- } // end function fCreateOption(sStr);
- function fGoSelect(nPsti, sSle, sForCmp){
- if(sSle=='')return false;
- sSle=sSle.split(',');
- if(sSle[nPsti-1]==sForCmp) return true;
- return false;
- } // end function fGoSelect(nPsti, sSle, sForCmp)
- function fCkLevel(sSrc, sDelimiter,sMarker){
- var num=0;
- var re=new RegExp('(.*?)'+sMarker);
- var re_=new RegExp(sDelimiter, 'g');
- sSrc.replace(re,function($0,$1){
- $1.replace(re_, function(m){
- num++;
- });
- });
- return num/2;
- } // end fCkLevel(sSrc, sDelimiter,sMarker);
- function fStrClearRepeat(sStr, sDelimiter){
- var iStr='';
- var re=new RegExp('.*?'+sDelimiter+'.*?'+sDelimiter, 'gi');
- sStr=sStr.replace(re,function(m){
- if(iStr.indexOf(m)==-1)
- iStr+=m;
- return '';
- });
- return iStr; // shawl.qiu code
- } // end function fStrClearRepeat(sStr, sDelimiter);
- //------------------------------------end private method
- } // shawl.qiu code
- //---------------------------------end class cFormSelect()---------------------------------//
- //]]>
- </script>
- </head>
- <body>
- <select name='super' id='level1'></select>
- <select name='sub' id='level2'></select>
- <select name='sub1' id='level3'></select>
- <br/><a href="?">back</a><br/>
- <a href="?id=1&idsub=13&idsub1=132">?id=1&idsub=13&idsub1=132</a><br/>
- <a href="?id=2&idsub=22&idsub1=223">?id=2&idsub=22&idsub1=223</a><br/>
- <a href="?id=3&idsub=31&idsub1=312">?id=3&idsub=31&idsub1=312</a><br/>
- </body>
- </html>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>shawl.qiu template</title>
- <script type="text/javascript">
- //<![CDATA[
- var str='1##cat 1##11##11cat ##111##111cat ##1111##1111cat ##@1##cat 1##11##11cat ##111##111cat ##1112##1112cat ##@1##cat 1##11##11cat ##111##111cat ##1113##1113cat ##@1##cat 1##11##11cat ##112##112cat ##1121##1121cat ##@1##cat 1##11##11cat ##112##112cat ##1122##1122cat ##@1##cat 1##11##11cat ##112##112cat ##1123##1123cat ##@1##cat 1##11##11cat ##113##113cat ##1131##1131cat ##@1##cat 1##11##11cat ##113##113cat ##1132##1132cat ##@1##cat 1##11##11cat ##113##113cat ##1133##1133cat ##@1##cat 1##12##12cat ##121##121cat ##1211##1211cat ##@1##cat 1##12##12cat ##121##121cat ##1212##1212cat ##@1##cat 1##12##12cat ##121##121cat ##1213##1213cat ##@1##cat 1##12##12cat ##122##122cat ##1221##1221cat ##@1##cat 1##12##12cat ##122##122cat ##1222##1222cat ##@1##cat 1##12##12cat ##122##122cat ##1223##1223cat ##@1##cat 1##12##12cat ##123##123cat ##1231##1231cat ##@1##cat 1##12##12cat ##123##123cat ##1232##1232cat ##@1##cat 1##12##12cat ##123##123cat ##1233##1233cat ##@1##cat 1##13##13cat ##131##131cat ##1311##1311cat ##@1##cat 1##13##13cat ##131##131cat ##1312##1312cat ##@1##cat 1##13##13cat ##131##131cat ##1313##1313cat ##@1##cat 1##13##13cat ##132##132cat ##1321##1321cat ##@1##cat 1##13##13cat ##132##132cat ##1322##1322cat ##@1##cat 1##13##13cat ##132##132cat ##1323##1323cat ##@1##cat 1##13##13cat ##133##133cat ##1331##1331cat ##@1##cat 1##13##13cat ##133##133cat ##1332##1332cat ##@1##cat 1##13##13cat ##133##133cat ##1333##1333cat ##@2##cat 2##21##21cat ##211##211cat ##2111##2111cat ##@2##cat 2##21##21cat ##211##211cat ##2112##2112cat ##@2##cat 2##21##21cat ##211##211cat ##2113##2113cat ##@2##cat 2##21##21cat ##212##212cat ##2121##2121cat ##@2##cat 2##21##21cat ##212##212cat ##2122##2122cat ##@2##cat 2##21##21cat ##212##212cat ##2123##2123cat ##@2##cat 2##21##21cat ##213##213cat ##2131##2131cat ##@2##cat 2##21##21cat ##213##213cat ##2132##2132cat ##@2##cat 2##21##21cat ##213##213cat ##2133##2133cat ##@2##cat 2##22##22cat ##221##221cat ##2211##2211cat ##@2##cat 2##22##22cat ##221##221cat ##2212##2212cat ##@2##cat 2##22##22cat ##221##221cat ##2213##2213cat ##@2##cat 2##22##22cat ##222##222cat ##2221##2221cat ##@2##cat 2##22##22cat ##222##222cat ##2222##2222cat ##@2##cat 2##22##22cat ##222##222cat ##2223##2223cat ##@2##cat 2##22##22cat ##223##223cat ##2231##2231cat ##@2##cat 2##22##22cat ##223##223cat ##2232##2232cat ##@2##cat 2##22##22cat ##223##223cat ##2233##2233cat ##@2##cat 2##23##23cat ##231##231cat ##2311##2311cat ##@2##cat 2##23##23cat ##231##231cat ##2312##2312cat ##@2##cat 2##23##23cat ##231##231cat ##2313##2313cat ##@2##cat 2##23##23cat ##232##232cat ##2321##2321cat ##@2##cat 2##23##23cat ##232##232cat ##2322##2322cat ##@2##cat 2##23##23cat ##232##232cat ##2323##2323cat ##@2##cat 2##23##23cat ##233##233cat ##2331##2331cat ##@2##cat 2##23##23cat ##233##233cat ##2332##2332cat ##@2##cat 2##23##23cat ##233##233cat ##2333##2333cat ##@3##cat 3##31##31cat ##311##311cat ##3111##3111cat ##@3##cat 3##31##31cat ##311##311cat ##3112##3112cat ##@3##cat 3##31##31cat ##311##311cat ##3113##3113cat ##@3##cat 3##31##31cat ##312##312cat ##3121##3121cat ##@3##cat 3##31##31cat ##312##312cat ##3122##3122cat ##@3##cat 3##31##31cat ##312##312cat ##3123##3123cat ##@3##cat 3##31##31cat ##313##313cat ##3131##3131cat ##@3##cat 3##31##31cat ##313##313cat ##3132##3132cat ##@3##cat 3##31##31cat ##313##313cat ##3133##3133cat ##@3##cat 3##32##32cat ##321##321cat ##3211##3211cat ##@3##cat 3##32##32cat ##321##321cat ##3212##3212cat ##@3##cat 3##32##32cat ##321##321cat ##3213##3213cat ##@3##cat 3##32##32cat ##322##322cat ##3221##3221cat ##@3##cat 3##32##32cat ##322##322cat ##3222##3222cat ##@3##cat 3##32##32cat ##322##322cat ##3223##3223cat ##@3##cat 3##32##32cat ##323##323cat ##3231##3231cat ##@3##cat 3##32##32cat ##323##323cat ##3232##3232cat ##@3##cat 3##32##32cat ##323##323cat ##3233##3233cat ##@3##cat 3##33##33cat ##331##331cat ##3311##3311cat ##@3##cat 3##33##33cat ##331##331cat ##3312##3312cat ##@3##cat 3##33##33cat ##331##331cat ##3313##3313cat ##@3##cat 3##33##33cat ##332##332cat ##3321##3321cat ##@3##cat 3##33##33cat ##332##332cat ##3322##3322cat ##@3##cat 3##33##33cat ##332##332cat ##3323##3323cat ##@3##cat 3##33##33cat ##333##333cat ##3331##3331cat ##@3##cat 3##33##33cat ##333##333cat ##3332##3332cat ##@3##cat 3##33##33cat ##333##333cat ##3333##3333cat ##@';
- onload=function(){
- var sle=new cFormSelect();
- sle.source=str; // 源字串
- sle.delimiter='##'; // 列定界符
- sle.marker='@'; // 行分隔符
- sle.idBase='level'; // 标签 ID 标准字串, 如: id1, id2. 其中的 id 就是基准字符.
- sle.defaultSelect='3,31,313,3131'; // 默认选中项, 以值为准: 如 2,21,211. 请不要带空格.
- sle.queryString='id,idsub,idsub1,idsub2'; // URL 栏查询串, 根据 URL 查询 ID 自动选中列表框项.
- sle.getItem(); // 执行本程序
- sle=null;
- }
- /*-----------------------------------------------------------------------------------*/
- * shawl.qiu javascript 表单列表框联动类 v1.0
- /*-----------------------------------------------------------------------------------*/
- //---------------------------------begin class cFormSelect()-------------------------------//
- function cFormSelect(){ // shawl.qiu code
- //------------------------------------begin public variable
- //---------------begin about
- this.auSubject='shawl.qiu javascript 表单列表框联动类';
- this.auVersion='1.0';
- this.au='shawl.qiu';
- this.auEmail='shawl.qiu@gmail.com';
- this.auBlog='http://blog.csdn.net/btbtd';
- this.auCreateDate='2006-12-28';
- //---------------end about
- this.source=''; // 源字串
- this.delimiter='#'; // 列定界符
- this.marker='@'; // 行分隔符
- this.idBase='level'; // 标签 ID 基准字串
- this.defaultSelect=''; // 默认选中, 格式: 值,值,值...
- this.queryString=''; // URL 查询ID
- this.item=0;
- this.count=1;
- //------------------------------------end public variable
- //------------------------------------begin public method
- this.getItem=function(){
- var sLcaStr=location.search;
- if(sLcaStr!=''){
- var arTemp=[];
- if(tl.queryString!=''){
- tl.queryString.replace(/(.+?)(/,|$)/g,function($0,$1){
- var re=new RegExp($1+'/=([^/&/=]+)');
- sLcaStr.replace(re,function($0,$1){
- arTemp[arTemp.length]=$1;
- });
- re=null;
- });
- tl.defaultSelect=arTemp.join(',');
- } // end if 2
- } // end if 1
- tl.item=fCkLevel(tl.source, tl.delimiter, tl.marker);
- fCreateOption(tl.source);
- } // end this.getItem
- this.onchange=function(oSle){
- var nId=oSle.id.replace(tl.idBase,'');
- tl.count=nId;
- fSelectOpt(tl.count);
- } // end this.onchange
- //------------------------------------end public method
- //------------------------------------begin private variable
- var tl=this;
- //------------------------------------end private variable
- //------------------------------------begin private method
- function fSelectOpt(nPsti){
- nPsti-=0;
- var sOpt='';
- var sTemp=''
- for(var i=nPsti; i<nPsti+1; i++){
- try{
- var n_psti=i+1;
- var oSle=document.getElementById(tl.idBase+n_psti);
- oSle.length=0;
- } catch(e){return false; }
- var oSleTemp=document.getElementById(tl.idBase+nPsti);
- sOpt+=oSleTemp.options[oSleTemp.options.selectedIndex].value;
- sOpt+=tl.delimiter;
- sOpt+=oSleTemp.options[oSleTemp.options.selectedIndex].innerHTML;
- sOpt+=tl.delimiter;
- oSleTemp=null;
- var oRe=new RegExp(sOpt+'(.*?'+tl.delimiter+'.*?'
- +tl.delimiter+')(.*?'+tl.marker+')','gi');
- tl.source.replace(oRe, function($0, $1, $2){
- sTemp+=$1;
- return $2;
- });
- sTemp=fStrClearRepeat(sTemp, tl.delimiter);
- var oRe=new RegExp('(.*?)'+tl.delimiter+'(.*?)'+tl.delimiter, 'gi');
- sTemp.replace(oRe,
- function($0, $1, $2){
- if(fGoSelect(tl.item, tl.defaultSelect, $1)){
- oSle.options[oSle.length]=new Option($2, $1, true, true);
- } else oSle.options[oSle.length]=new Option($2, $1);
- });
- oSle=null;
- } // end for 1
- try{ arguments.callee(nPsti+1) } catch(e){}
- } // end function fGoSelect
- function fGetOptStr(nCount, sDelimiter){
- if(nCount<=1)return false;
- var sTemp='';
- for(var i=1; i<nCount; i++){
- var oSlePrnt=document.getElementById(tl.idBase+i);
- sTemp+=oSlePrnt.options[oSlePrnt.options.selectedIndex].value;
- sTemp+=sDelimiter;
- sTemp+=oSlePrnt.options[oSlePrnt.options.selectedIndex].innerHTML;
- sTemp+=sDelimiter;
- oSlePrnt=null;
- } // end for
- return sTemp;
- } // end function fGetOptStr(nCount, sDelimiter)
- function fCreateOption(sStr){
- if(tl.count>tl.item)return false;
- var oSle=document.getElementById(tl.idBase+tl.count);
- oSle.onchange=function(){
- tl.onchange(this);
- }
- var sText='';
- var sValue='';
- var sTemp='';
- if(tl.count==1){
- var oRe=new RegExp('(.*?'+tl.delimiter+'.*?'+tl.delimiter+')(.*?'+tl.marker+')','gi');
- sStr=sStr.replace(oRe, function($0, $1, $2){
- sTemp+=$1;
- return $2;
- });
- } else {
- var sOpt=fGetOptStr(tl.count, tl.delimiter);
- var oRe=new RegExp(sOpt+'(.*?'+tl.delimiter+'.*?'
- +tl.delimiter+')(.*?'+tl.marker+')','gi');
- tl.source.replace(oRe, function($0, $1, $2){
- sTemp+=$1;
- return $2;
- });
- } //end else 1
- sTemp=fStrClearRepeat(sTemp, tl.delimiter);
- var oRe=new RegExp('(.*?)'+tl.delimiter+'(.*?)'+tl.delimiter, 'gi');
- sTemp.replace(oRe,
- function($0, $1, $2){
- if(fGoSelect(tl.count, tl.defaultSelect, $1)){
- oSle.options[oSle.length]=new Option($2, $1, true, true);
- } else oSle.options[oSle.length]=new Option($2, $1);
- });
- oSle=null;
- tl.count++;
- arguments.callee(sStr);
- } // end function fCreateOption(sStr);
- function fGoSelect(nPsti, sSle, sForCmp){
- if(sSle=='')return false;
- sSle=sSle.split(',');
- if(sSle[nPsti-1]==sForCmp) return true;
- return false;
- } // end function fGoSelect(nPsti, sSle, sForCmp)
- function fCkLevel(sSrc, sDelimiter,sMarker){
- var num=0;
- var re=new RegExp('(.*?)'+sMarker);
- var re_=new RegExp(sDelimiter, 'g');
- sSrc.replace(re,function($0,$1){
- $1.replace(re_, function(m){
- num++;
- });
- });
- return num/2;
- } // end fCkLevel(sSrc, sDelimiter,sMarker);
- function fStrClearRepeat(sStr, sDelimiter){
- var iStr='';
- var re=new RegExp('.*?'+sDelimiter+'.*?'+sDelimiter, 'gi');
- sStr=sStr.replace(re,function(m){
- if(iStr.indexOf(m)==-1)
- iStr+=m;
- return '';
- });
- return iStr; // shawl.qiu code
- } // end function fStrClearRepeat(sStr, sDelimiter);
- //------------------------------------end private method
- } // shawl.qiu code
- //---------------------------------end class cFormSelect()---------------------------------//
- //]]>
- </script>
- </head>
- <body>
- <select name='super' id='level1'></select>
- <select name='sub' id='level2'></select>
- <select name='sub1' id='level3'></select>
- <select name='sub2' id='level4'></select>
- <br/><a href="?">back</a><br/>
- <a href="?id=1&idsub=13&idsub1=132&idsub2=1321">?id=1&idsub=13&idsub1=132&idsub2=1321</a><br/>
- <a href="?id=2&idsub=22&idsub1=223&idsub2=2232">?id=2&idsub=22&idsub1=223&idsub2=2232</a><br/>
- <a href="?id=3&idsub=31&idsub1=313&idsub2=3133">?id=3&idsub=31&idsub1=313&idsub2=3133</a><br/>
- </body>
- </html>
- <%@LANGUAGE="JAVASCRIPT" CODEPAGE="65001"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>shawl.qiu template</title>
- </head>
- <body>
- <%
- var str='cat '
- var sDelimiter='##';
- var sMarker='@';
- var iStr='';
- /*
- for(var i=1; i<=3; i++){
- for(var j=1; j<=3; j++){
- iStr+=i+sDelimiter+str+i+sDelimiter+
- i+j+sDelimiter+i+j+str+sDelimiter+
- sMarker;
- } // end for 2
- } // end for 1
- */
- /*
- for(var i=1; i<=3; i++){
- for(var j=1; j<=3; j++){
- for(var k=1; k<=3; k++){
- iStr+=i+sDelimiter+str+i+sDelimiter+
- i+j+sDelimiter+i+j+str+sDelimiter+
- i+j+k+sDelimiter+i+j+k+str+sDelimiter+
- sMarker;
- } // end for 3
- } // end for 2
- } // end for 1
- */
- for(var i=1; i<=3; i++){
- for(var j=1; j<=3; j++){
- for(var k=1; k<=3; k++){
- for(var l=1; l<=3; l++){
- iStr+=i+sDelimiter+str+i+sDelimiter+
- i+j+sDelimiter+i+j+str+sDelimiter+
- i+j+k+sDelimiter+i+j+k+str+sDelimiter+
- i+j+k+l+sDelimiter+i+j+k+l+str+sDelimiter+
- sMarker+'<br>';
- } // end for 4
- } // end for 3
- } // end for 2
- } // end for 1
- Response.write(iStr);
- %>
- </body>
- </html>