浅析用JavaScript实现select所支持的功能

开发 前端
本文对用JavaScript实现select所支持的功能进行介绍,同时也介绍一些标识的定义,希望本文能对大家有所帮助。

在进行JavaScript实现select所支持的功能实现时,首先需要了解一些标识的定义,比如true-这个是控制单击时出现下拉框体的标识等等。

调用时可以这样:

1,tempStr=GetNewSelectStr(dataTable.value,"select"+rowIndex,true);

2,makeSelectBox("select"+rowIndex,tempStr,value,obj);

tempStr-这个是返回的下拉列表值的框体

dataTable.value-这个是数据源(我这里是一张表)

"select"+rowIndex-这个是ID号,也就是当前这个select的id号(我这里是有多个select所以ID号是自动的)

true-这个是控制单击时出现下拉框体的标识

value-这个是初始的时候显示在select输入框中的值

obj-这个是要显示select的对象

JavaScript实现select源代码:

  1. var nowOpenedSelectBox = "";   
  2.   var mousePosition = "";   
  3.   var userList=null;   
  4.   function selectThisValue(thisId,thisIndex,thisValue,thisString) {   
  5.   var objId = thisId;   
  6.   var nowIndex = thisIndex;   
  7.   var valueString = thisString;   
  8.   var sourceObj = $(objId);   
  9.   var nowSelectedValue = document.getElementById(nowIndex+thisId).innerHTML;   
  10.   hideOptionLayer(objId);   
  11.   if (sourceObj) sourceObj.value = nowSelectedValue;   
  12.   settingValue(objId,valueString);   
  13.   selectBoxFocus(objId);   
  14.   if (sourceObj.onchange) sourceObj.onchange();   
  15.   }   
  16.   function settingValue(thisId,thisString) {   
  17.   var objId = thisId;   
  18.   var valueString = thisString;   
  19.   var selectedArea = document.getElementById(objId+"selectBoxSelectedValue");   
  20.   if (selectedArea) {   
  21.   if(navigator.appName.indexOf("Explorer") > -1){   
  22.   selectedArea.innerText = valueString;   
  23.   }   
  24.   else{   
  25.   selectedArea.textContent = valueString;   
  26.   }   
  27.   }   
  28.   }   
  29.   var l=0;   
  30.   //显示下拉框中的值   
  31.   function viewOptionLayer(thisId,Istask,flag) {   
  32.   var objId = thisId;   
  33.   var selectInfo="";   
  34.   var optionHeight = 18; // 高   
  35.   var optionMaxNum = 7; //   
  36.   var optionInnerLayerHeight = "";   
  37.   var selectBoxWidth =130;   
  38.   var selectBoxHeight =17;   
  39.   l=userList.Rows.length;   
  40.   var optionLayer = document.getElementById(objId+"selectBoxs");   
  41.   if(optionLayer.innerHTML=="")   
  42.   {   
  43.   if (l > optionMaxNum) optionInnerLayerHeight = "height:"+ (optionHeight * optionMaxNum) + "px";   
  44.   selectInfo = "";   
  45.   if(Istask=="true")   
  46.   {   
  47.   selectInfo += " ";   
  48.   selectInfo += " ";   
  49.   selectInfo += "    
  50. ";   
  51.   selectInfo += " ";   
  52.   selectInfo += " ";   
  53.   selectInfo += "    
  54. ";   
  55.   }   
  56.   else   
  57.   {   
  58.   selectInfo += " ";   
  59.   selectInfo += " ";   
  60.   selectInfo += "    
  61. ";   
  62.   }   
  63.   selectInfo += " ";   
  64.   selectInfo += " ";   
  65.   selectInfo += "    
  66. ";   
  67.   selectInfo += " ";   
  68.   for (var i=0 ; i < l ; i++)   
  69.   {   
  70.   var nowValue = userList.Rows[i][userList.Columns[0].Name];   
  71.   var nowText = userList.Rows[i][userList.Columns[0].Name];   
  72.   if(Istask=="true")   
  73.   {   
  74.   selectInfo += " ";   
  75.   }   
  76.   else   
  77.   {   
  78.   selectInfo += "    
  79. ";   
  80.   }   
  81.   selectInfo += " " + nowText + "";   
  82.   // selectInfo += " ";   
  83.   selectInfo += "    
  84. ";   
  85.   }   
  86.   selectInfo += " ";   
  87.   selectInfo += "    
  88. ";   
  89.   selectInfo += " ";   
  90.   selectInfo += "    
  91. ";   
  92.   selectInfo +=   
  93.   "";   
  94.   optionLayer.innerHTML=selectInfo;   
  95.   }   
  96.   if (flag && optionLayer.style.display=="none"){ optionLayer.style.display = "";optionLayer.focus();}   
  97.   else   
  98.   {   
  99.   optionLayer.style.display = "none";   
  100.   if(document.getElementById("level"))   
  101.   {   
  102.   document.getElementById("level").style.display="";   
  103.   }   
  104.   if(document.getElementById("priority"))   
  105.   {   
  106.   document.getElementById("priority").style.display="";   
  107.   }   
  108.   }   
  109.   if(!flag){optionLayer.style.display = "";optionLayer.focus();}   
  110.   for(var i=0;i    
  111.   {   
  112.   if(document.getElementById("select"+i+""+"viewOptions"))   
  113.   {   
  114.   document.getElementById("select"+i+""+"viewOptions").style.display="none";   
  115.   }   
  116.   }   
  117.   document.getElementById(objId+"viewOptions").style.display="";   
  118.   if(document.getElementById("level"))   
  119.   {   
  120.   document.getElementById("level").style.display="none";   
  121.   }   
  122.   if(document.getElementById("priority"))   
  123.   {   
  124.   document.getElementById("priority").style.display="none";   
  125.   }   
  126.   nowOpenedSelectBox = objId;   
  127.   setMousePosition("inBox");   
  128.   }   
  129.   //支持首字母筛选、回车键取值、上下键选值功能   
  130.   function firstLetter(thisId){   
  131.   var count=0;   
  132.   var selectedVal="";   
  133.   if(document.getElementById(thisId+"viewOptions").style.display=="")   
  134.   {   
  135.   document.getElementById(thisId+"viewOptions").focus();   
  136.   var asciiCode=String.fromCharCode(event.keyCode).toLowerCase();   
  137.   var selectValue="";   
  138.   if(event.keyCode==38)   
  139.   {   
  140.   for(var i=0;i    
  141.   {   
  142.   if(document.getElementById(i+thisId).className=="selectBoxOptionOver" && i>0)   
  143.   {   
  144.   document.getElementById(i+thisId).style.backgroundColor='#ffffff';   
  145.   document.getElementById(i+thisId).style.color='#253449';   
  146.   document.getElementById(i+thisId).className='selectBoxOption';   
  147.   document.getElementById((i-1)+thisId).style.backgroundColor='#2c59aa';   
  148.   document.getElementById((i-1)+thisId).style.color='#ffffff';   
  149.   document.getElementById((i-1)+thisId).className='selectBoxOptionOver';   
  150.   document.getElementById(thisId+"viewOptions").scrollTop= (i-1)*20;   
  151.   count=1;   
  152.   break;   
  153.   }   
  154.   }   
  155.   if(count==0)   
  156.   {   
  157.   document.getElementById((l-1)+thisId).style.backgroundColor='#2c59aa';   
  158.   document.getElementById((l-1)+thisId).style.color='#ffffff';   
  159.   document.getElementById((l-1)+thisId).className='selectBoxOptionOver';   
  160.   }   
  161.   }   
  162.   if(event.keyCode==40)   
  163.   {   
  164.   for(var i=0;i    
  165.   {   
  166.   if(document.getElementById(i+thisId).className=="selectBoxOptionOver" && i    
  167.   {   
  168.   document.getElementById(i+thisId).style.backgroundColor='#ffffff';   
  169.   document.getElementById(i+thisId).style.color='#253449';   
  170.   document.getElementById(i+thisId).className='selectBoxOption';   
  171.   document.getElementById((i+1)+thisId).style.backgroundColor='#2c59aa';   
  172.   document.getElementById((i+1)+thisId).style.color='#ffffff';   
  173.   document.getElementById((i+1)+thisId).className='selectBoxOptionOver';   
  174.   if(i>10)   
  175.   {   
  176.   document.getElementById(thisId+"viewOptions").scrollTop= (i+1)*19;   
  177.   }   
  178.   else   
  179.   {   
  180.   document.getElementById(thisId+"viewOptions").scrollTop= (i+1)*10;   
  181.   }   
  182.   count=1;   
  183.   break;   
  184.   }   
  185.   }   
  186.   &nb   
  187.   sp; if(count==0)   
  188.   {   
  189.   document.getElementById(0+thisId).style.backgroundColor='#2c59aa';   
  190.   document.getElementById(0+thisId).style.color='#ffffff';   
  191.   document.getElementById(0+thisId).className='selectBoxOptionOver';   
  192.   }   
  193.   }   
  194.   if(event.keyCode==13)   
  195.   {   
  196.   for(var i=0;i    
  197.   {   
  198.   if(document.getElementById(i+thisId).className=="selectBoxOptionOver")   
  199.   {   
  200.   selectedVal=document.getElementById(i+thisId).innerHTML;   
  201.   var sourceObj = $(thisId);   
  202.   hideOptionLayer(thisId);   
  203.   if (sourceObj) sourceObj.value = selectedVal;   
  204.   settingValue(thisId,selectedVal);   
  205.   selectBoxFocus(thisId);   
  206.   if (sourceObj.onchange) sourceObj.onchange();   
  207.   document.getElementById(thisId+"viewOptions").style.display="none";   
  208.   if(document.getElementById("level"))   
  209.   {   
  210.   document.getElementById("level").style.display="";   
  211.   }   
  212.   if(document.getElementById("priority"))   
  213.   {   
  214.   document.getElementById("priority").style.display="";   
  215.   }   
  216.   break;   
  217.   }   
  218.   }   
  219.   }   
  220.   for(var i=0 ; i < l ; i++)   
  221.   {   
  222.   selectValue=document.getElementById(i+thisId).innerHTML;   
  223.   if(asciiCode==selectValue.substring(0,1))   
  224.   {   
  225.   resetStyle(thisId);   
  226.   document.getElementById(i+thisId).style.backgroundColor='#2c59aa';   
  227.   document.getElementById(i+thisId).style.color='#ffffff';   
  228.   document.getElementById(i+thisId).className='selectBoxOptionOver';   
  229.   document.getElementById(thisId+"viewOptions").scrollTop= i*19;   
  230.   break;   
  231.   }   
  232.   }   
  233.   }   
  234.   }   
  235.   //清除被选中的下拉列表值的样式   
  236.   function resetStyle(thisId){   
  237.   for(var i=0;i    
  238.   {   
  239.   document.getElementById(i+thisId).style.backgroundColor='#ffffff';   
  240.   document.getElementById(i+thisId).style.color='#253449';   
  241.   document.getElementById(i+thisId).className='selectBoxOption';   
  242.   }   
  243.   }   
  244.   //隐藏下拉框   
  245.   function hideOptionLayer(thisId) {   
  246.   var objId = thisId;   
  247.   var optionLayer = document.getElementById(objId+"selectBoxs");   
  248.   if (optionLayer) optionLayer.style.display = "none";   
  249.   if(document.getElementById("level"))   
  250.   {   
  251.   document.getElementById("level").style.display="";   
  252.   }   
  253.   if(document.getElementById("priority"))   
  254.   {   
  255.   document.getElementById("priority").style.display="";   
  256.   }   
  257.   }   
  258.   function setMousePosition(thisValue) {   
  259.   var positionValue = thisValue;   
  260.   mousePosition = positionValue;   
  261.   }   
  262.   function clickMouse() {   
  263.   if (mousePosition == "out") hideOptionLayer(nowOpenedSelectBox);   
  264.   }   
  265.   function selectBoxFocus(thisId) {   
  266.   var objId = thisId;   
  267.   var obj = document.getElementById(objId + "selectBoxSelectedValue");   
  268.   obj.className = "selectBoxSelectedAreaFocus";   
  269.   obj.focus();   
  270.   }   
  271.   function selectBoxBlur(thisId) {   
  272.   var objId = thisId;   
  273.   var obj = document.getElementById(objId + "selectBoxSelectedValue");   
  274.   obj.className = "selectBoxSelectedArea";   
  275.   }   
  276.   function hiddenOptions(thisId){   
  277.   document.getElementById(thisId+"viewOptions").style.display="none";   
  278.   if(document.getElementById("level"))   
  279.   {   
  280.   document.getElementById("level").style.display="";   
  281.   }   
  282.   if(document.getElementById("priority"))   
  283.   {   
  284.   document.getElementById("priority").style.display="";   
  285.   }   
  286.   }   
  287.   function makeSelectBox(index,newSelect,value,obj) {   
  288.   newSelect=newSelect.replace(/(select0)/g,index);   
  289.   $(obj).html(newSelect);   
  290.   settingValue(index,value);   
  291.   }   
  292.   function GetNewSelectStr(table,index,IsTask){   
  293.   userList=table;   
  294.   var downArrowSrc = "../images/sanjiao.gif"//三角   
  295.   var downArrowSrcWidth = 16; //宽   
  296.   var selectBoxWidth =130;   
  297.   var selectBoxHeight =17;   
  298.   newSelect="   
  299. "   
  300.   ; newSelect += "";   
  301.   newSelect += " ";   
  302.   newSelect += " ";   
  303.   newSelect += " ";   
  304.   if(IsTask)   
  305.   {   
  306.   newSelect += " ";   
  307.   newSelect += " ";   
  308.   }   
  309.   else   
  310.   {   
  311.   newSelect += "    
  312. ";   
  313.   newSelect += " ";   
  314.   }   
  315.   newSelect += " ";   
  316.   newSelect += "    
  317. ";   
  318.   newSelect += " ";   
  319.   newSelect += " ";   
  320.   newSelect += "    
  321. ";   
  322.   newSelect += "";   
  323.   return newSelect ;   
  324.   }  

【编辑推荐】

  1. JSON是什么?为JavaScript准备的数据格式
  2. 十个最常用的JavaScript自定义函数
  3. 有关JavaScript事件加载的一些延伸思考
  4. JavaScript使用心得汇总:从BOM和DOM谈起
  5. ExtJS在Android模拟器上的运行效果
责任编辑:彭凡 来源: IT专家网
相关推荐

2010-04-20 14:31:29

负载均衡功能

2010-02-25 13:35:27

WCF tcpTrac

2009-10-12 10:33:11

Javascript替

2009-09-14 19:21:36

Javascript透

2021-03-27 11:02:04

JavaScript队列编程语言

2021-07-27 22:56:00

JavaScript编程开发

2012-10-11 14:42:19

FastDFS

2009-09-04 09:27:48

C#调用浏览器

2015-05-28 14:13:14

光纤通信

2009-07-24 17:30:37

Javascript闭

2021-02-07 22:59:55

JavaScript编程方法链

2011-03-07 09:41:10

JavaScript

2016-10-19 14:35:20

JavaScript函数式编程

2016-09-06 21:37:41

2009-11-03 17:46:50

ADO.NET Sel

2011-03-10 14:19:56

JavaScript

2010-09-28 14:12:50

Javascript

2016-09-14 21:28:25

JavaScript事件代理委托

2011-03-08 09:15:04

JavaScript

2022-01-17 21:37:24

JavaScriptHTMLCSS
点赞
收藏

51CTO技术栈公众号