一个用javascript写的select支持上下键、首字母筛选以及回车取值的功能_Javascript教程-查字典教程网
一个用javascript写的select支持上下键、首字母筛选以及回车取值的功能
一个用javascript写的select支持上下键、首字母筛选以及回车取值的功能
发布时间:2016-12-30 来源:查字典编辑
摘要:调用时可以这样:1,tempStr=GetNewSelectStr(dataTable.value,"select"+rowIndex,tr...

调用时可以这样:

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的对象

源代码:

<script type="text/javascript">

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

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

var nowOpenedSelectBox = "";

var mousePosition = "";

var userList=null;

function selectThisValue(thisId,thisIndex,thisValue,thisString) {

var objId = thisId;

var nowIndex = thisIndex;

var valueString = thisString;

var sourceObj = $(objId);

var nowSelectedValue = document.getElementById(nowIndex+thisId).innerHTML;

hideOptionLayer(objId);

if (sourceObj) sourceObj.value = nowSelectedValue;

settingValue(objId,valueString);

selectBoxFocus(objId);

if (sourceObj.onchange) sourceObj.onchange();

}

function settingValue(thisId,thisString) {

var objId = thisId;

var valueString = thisString;

var selectedArea = document.getElementById(objId+"selectBoxSelectedValue");

if (selectedArea) {

if(navigator.appName.indexOf("Explorer") > -1){

selectedArea.innerText = valueString;

}

else{

selectedArea.textContent = valueString;

}

}

}

var l=0;

//显示下拉框中的值

function viewOptionLayer(thisId,Istask,flag) {

var objId = thisId;

var selectInfo="";

var optionHeight = 18; // 高

var optionMaxNum = 7; //

var optionInnerLayerHeight = "";

var selectBoxWidth =130;

var selectBoxHeight =17;

l=userList.Rows.length;

var optionLayer = document.getElementById(objId+"selectBoxs");

if(optionLayer.innerHTML=="")

{

if (l > optionMaxNum) optionInnerLayerHeight = "height:"+ (optionHeight * optionMaxNum) + "px";

selectInfo = "<table id='" + objId + "selectBoxOptionLayer' cellpadding='0' cellspacing='0' border='0'>";

if(Istask=="true")

{

selectInfo += " <tr>";

selectInfo += " <td height='" + selectBoxHeight + "' onClick="hideOptionLayer('"+ objId + "')"></td>";

selectInfo += " </tr>";

selectInfo += " <tr>";

selectInfo += " <td></td>";

selectInfo += " </tr>";

}

else

{

selectInfo += " <tr>";

selectInfo += " <td height='" + selectBoxHeight + "' onClick="hideOptionLayer('"+ objId + "')"></td>";

selectInfo += " </tr>";

}

selectInfo += " <tr>";

selectInfo += " <td>";

selectInfo += " <div id='"+objId+"viewOptions' + selectBoxWidth + "px;" + optionInnerLayerHeight + "'>";

selectInfo += " <table cellpadding='0' cellspacing='0' border='0' width='98%'>";

for (var i=0 ; i < l ; i++)

{

var nowValue = userList.Rows[i][userList.Columns[0].Name];

var nowText = userList.Rows[i][userList.Columns[0].Name];

if(Istask=="true")

{

selectInfo += " <tr>";

}

else

{

selectInfo += " <tr>";

}

selectInfo += " <td id='"+i+objId+"' onMouseOver="resetStyle('"+objId+"');this.style.backgroundColor='#2c59aa';this.style.color='#ffffff';return true;" onMouseOut="this.style.backgroundColor='#FFFFFF';this.style.color='#253449';return true;" height='" + optionHeight + "' onMouseOver="this.className='selectBoxOptionOver'" onMouseOut="this.className='selectBoxOption'" onClick="selectThisValue('"+ objId + "'," + i + ",'" + nowValue + "','" + nowText + "')">" + nowText + "</td>";

// selectInfo += " <input type='hidden' id='"+ objId + "SelectBoxOptionValue" + i + "' value='" + nowValue + "'/>";

selectInfo += " </tr>";

}

selectInfo += " </table>";

selectInfo += " </div>";

selectInfo += " </td>";

selectInfo += " </tr>";

selectInfo += "</table>";

optionLayer.innerHTML=selectInfo;

}

if (flag && optionLayer.style.display=="none"){ optionLayer.style.display = "";optionLayer.focus();}

else

{

optionLayer.style.display = "none";

if(document.getElementById("level"))

{

document.getElementById("level").style.display="";

}

if(document.getElementById("priority"))

{

document.getElementById("priority").style.display="";

}

}

if(!flag){optionLayer.style.display = "";optionLayer.focus();}

for(var i=0;i<count;i++)

{

if(document.getElementById("select"+i+""+"viewOptions"))

{

document.getElementById("select"+i+""+"viewOptions").style.display="none";

}

}

document.getElementById(objId+"viewOptions").style.display="";

if(document.getElementById("level"))

{

document.getElementById("level").style.display="none";

}

if(document.getElementById("priority"))

{

document.getElementById("priority").style.display="none";

}

nowOpenedSelectBox = objId;

setMousePosition("inBox");

}

//支持首字母筛选、回车键取值、上下键选值功能

function firstLetter(thisId){

var count=0;

var selectedVal="";

if(document.getElementById(thisId+"viewOptions").style.display=="")

{

document.getElementById(thisId+"viewOptions").focus();

var asciiCode=String.fromCharCode(event.keyCode).toLowerCase();

var selectValue="";

if(event.keyCode==38)

{

for(var i=0;i<l;i++)

{

if(document.getElementById(i+thisId).className=="selectBoxOptionOver" && i>0)

{

document.getElementById(i+thisId).style.backgroundColor='#ffffff';

document.getElementById(i+thisId).style.color='#253449';

document.getElementById(i+thisId).className='selectBoxOption';

document.getElementById((i-1)+thisId).style.backgroundColor='#2c59aa';

document.getElementById((i-1)+thisId).style.color='#ffffff';

document.getElementById((i-1)+thisId).className='selectBoxOptionOver';

document.getElementById(thisId+"viewOptions").scrollTop= (i-1)*20;

count=1;

break;

}

}

if(count==0)

{

document.getElementById((l-1)+thisId).style.backgroundColor='#2c59aa';

document.getElementById((l-1)+thisId).style.color='#ffffff';

document.getElementById((l-1)+thisId).className='selectBoxOptionOver';

}

}

if(event.keyCode==40)

{

for(var i=0;i<l;i++)

{

if(document.getElementById(i+thisId).className=="selectBoxOptionOver" && i<l-1)

{

document.getElementById(i+thisId).style.backgroundColor='#ffffff';

document.getElementById(i+thisId).style.color='#253449';

document.getElementById(i+thisId).className='selectBoxOption';

document.getElementById((i+1)+thisId).style.backgroundColor='#2c59aa';

document.getElementById((i+1)+thisId).style.color='#ffffff';

document.getElementById((i+1)+thisId).className='selectBoxOptionOver';

if(i>10)

{

document.getElementById(thisId+"viewOptions").scrollTop= (i+1)*19;

}

else

{

document.getElementById(thisId+"viewOptions").scrollTop= (i+1)*10;

}

count=1;

break;

}

}

if(count==0)

{

document.getElementById(0+thisId).style.backgroundColor='#2c59aa';

document.getElementById(0+thisId).style.color='#ffffff';

document.getElementById(0+thisId).className='selectBoxOptionOver';

}

}

if(event.keyCode==13)

{

for(var i=0;i<l;i++)

{

if(document.getElementById(i+thisId).className=="selectBoxOptionOver")

{

selectedVal=document.getElementById(i+thisId).innerHTML;

var sourceObj = $(thisId);

hideOptionLayer(thisId);

if (sourceObj) sourceObj.value = selectedVal;

settingValue(thisId,selectedVal);

selectBoxFocus(thisId);

if (sourceObj.onchange) sourceObj.onchange();

document.getElementById(thisId+"viewOptions").style.display="none";

if(document.getElementById("level"))

{

document.getElementById("level").style.display="";

}

if(document.getElementById("priority"))

{

document.getElementById("priority").style.display="";

}

break;

}

}

}

for(var i=0 ; i < l ; i++)

{

selectValue=document.getElementById(i+thisId).innerHTML;

if(asciiCode==selectValue.substring(0,1))

{

resetStyle(thisId);

document.getElementById(i+thisId).style.backgroundColor='#2c59aa';

document.getElementById(i+thisId).style.color='#ffffff';

document.getElementById(i+thisId).className='selectBoxOptionOver';

document.getElementById(thisId+"viewOptions").scrollTop= i*19;

break;

}

}

}

}

//清除被选中的下拉列表值的样式

function resetStyle(thisId){

for(var i=0;i<l;i++)

{

document.getElementById(i+thisId).style.backgroundColor='#ffffff';

document.getElementById(i+thisId).style.color='#253449';

document.getElementById(i+thisId).className='selectBoxOption';

}

}

//隐藏下拉框

function hideOptionLayer(thisId) {

var objId = thisId;

var optionLayer = document.getElementById(objId+"selectBoxs");

if (optionLayer) optionLayer.style.display = "none";

if(document.getElementById("level"))

{

document.getElementById("level").style.display="";

}

if(document.getElementById("priority"))

{

document.getElementById("priority").style.display="";

}

}

function setMousePosition(thisValue) {

var positionValue = thisValue;

mousePosition = positionValue;

}

function clickMouse() {

if (mousePosition == "out") hideOptionLayer(nowOpenedSelectBox);

}

function selectBoxFocus(thisId) {

var objId = thisId;

var obj = document.getElementById(objId + "selectBoxSelectedValue");

obj.className = "selectBoxSelectedAreaFocus";

obj.focus();

}

function selectBoxBlur(thisId) {

var objId = thisId;

var obj = document.getElementById(objId + "selectBoxSelectedValue");

obj.className = "selectBoxSelectedArea";

}

function hiddenOptions(thisId){

document.getElementById(thisId+"viewOptions").style.display="none";

if(document.getElementById("level"))

{

document.getElementById("level").style.display="";

}

if(document.getElementById("priority"))

{

document.getElementById("priority").style.display="";

}

}

function makeSelectBox(index,newSelect,value,obj) {

newSelect=newSelect.replace(/(select0)/g,index);

$(obj).html(newSelect);

settingValue(index,value);

}

function GetNewSelectStr(table,index,IsTask){

userList=table;

var downArrowSrc = "../images/sanjiao.gif"; //三角

var downArrowSrcWidth = 16; //宽

var selectBoxWidth =130;

var selectBoxHeight =17;

newSelect="<div id='" + index + "selectBoxs' onMouseOut="setMousePosition('out')" onkeydown="firstLetter('"+ index + "')"></div>"

newSelect += "<table cellpadding='0' cellspacing='1' border='0' onClick="viewOptionLayer('"+ index + "','"+ IsTask + "',true)" onkeydown="firstLetter('"+ index + "')">";

newSelect += " <tr>";

newSelect += " <td>";

newSelect += " <table cellpadding='0' cellspacing='0' border='0'>";

if(IsTask)

{

newSelect += " <tr>";

newSelect += " <td><div id='" + index + "selectBoxSelectedValue' name='selectBoxSelectedValue' + (selectBoxWidth-downArrowSrcWidth-3)+ "px;height:" + selectBoxHeight + "px;overflow:hidden;' onBlur="selectBoxBlur('" + index + "');ValueEditd(this)" onchange='ValueEditd(this)'></div></td>";

}

else

{

newSelect += " <tr>";

newSelect += " <td><div id='" + index + "selectBoxSelectedValue' name='selectBoxSelectedValue' + (selectBoxWidth-downArrowSrcWidth-4)+ "px;overflow:hidden;' onBlur="selectBoxBlur('" + index + "');"></div></td>";

}

newSelect += " <td><img src='" + downArrowSrc + "' width='" + downArrowSrcWidth + "' border='0'></td>";

newSelect += " </tr>";

newSelect += " </table>";

newSelect += " </td>";

newSelect += " </tr>";

newSelect += "</table>";

return newSelect ;

}

</script>

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新Javascript教程学习
    热门Javascript教程学习
    编程开发子分类