问题描述
/***@author大漠雪狼**//********************************可配置选项********************************///被选中的相似关键字背景颜色varselectedBgColorcompany="#CCCCCC";//未被选中的相似关键字背景颜色varunselectedBgColorcompany="#FFFFFF";//相似关键字列表框的边框varlistBordercompany="1solid#000000";/***************************************************************************//********************************不可配置选项********************************///上一次输入的关键字(用来判断关键字是否有改变,没有则不再去服务端重新获取提示关键字)varoldKeyValuecompany;//鼠标相对于提示关键字列表框的位置(0:提示框外面,1:提示框里面)varmouseLocationcompany=0;//当前选中的提示关键字索引(从0开始,等于-1表示没有被选中项)varselectedKeyIndexcompany=-1;//上一次选中的提示关键字索引(从0开始,等于-1表示没有上次被选中项)varoldSelectedKeyIndexcompany=-1;//提示关键字总数vartdCountcompany=0;/***************************************************************************//*用途:给String对象添加去除左右空格方法*/String.prototype.trim=function(){varm=this.match(/^s*(S+(s+S+)*)s*$/);return(m==null)?"":m[1];}/*用途:初始化提示关键字列表框的状态*/functioninitKeyListState(){selectedKeyIndexcompany=-1;oldSelectedKeyIndexcompany=-1;tdCountcompany=0;}/*用途:将上一次选中的关键字项变为未选中*/functiondisSelectedOldKey(){//判断说明:oldSelectedKeyIndex!=selectedKeyIndexcompany//当只有一个相似关键字的时候,则不存在上一次选中和这次选中关键字,//只要第一次选中后,按向上或向下箭头都是选中。if(oldSelectedKeyIndexcompany!=-1&&oldSelectedKeyIndexcompany!=selectedKeyIndexcompany){document.getElementById('keyIdcompany'+oldSelectedKeyIndexcompany).bgColor=unselectedBgColorcompany;}//上一次选中项更新vardiv=document.getElementById("guestlistDiv");oldSelectedKeyIndexcompany=selectedKeyIndexcompany;//////alert(div.scrollTop);//////vardivobj=document.getElementById("guestlistDiv");////divobj.innerHTML=divobj.innerHTML+document.getElementById("showGuestList").value+"<br>"//divobj.scrollTop=divobj.scrollHeight-divobj.offsetHeight;////////varscrolltop=document.documentElement.scrollTop;//////document.documentElement.scrollTop=scrolltop+1;//}/*用途:当按上下箭头时选中新的提示关键字项,按回车时将选中的提示关键字输入到搜索框。*/functionsetSelectedKey(){//$('keyId0')存在表示有相关提示关键字,不存在则不处理。if(document.getElementById('keyIdcompany0')){if(event.keyCode==38){//------处理向上事件------if(selectedKeyIndexcompany==-1){selectedKeyIndexcompany=tdCountcompany-1;}else{selectedKeyIndexcompany=(selectedKeyIndexcompany+tdCountcompany-1)%tdCountcompany;}document.getElementById('keyIdcompany'+selectedKeyIndexcompany).bgColor=selectedBgColorcompany;disSelectedOldKey();}elseif(event.keyCode==40){//------处理向下事件------if(selectedKeyIndexcompany==-1){selectedKeyIndexcompany=0;}else{selectedKeyIndexcompany=(selectedKeyIndexcompany+1)%tdCountcompany;}document.getElementById('keyIdcompany'+selectedKeyIndexcompany).bgColor=selectedBgColorcompany;disSelectedOldKey();}elseif(event.keyCode==13){//------处理回车事件------document.getElementById('saler').value=document.getElementById('keyIdcompany'+selectedKeyIndexcompany).innerText;setCursorLast(document.getElementById('saler'));//隐藏提示关键字列表框document.getElementById('guestlistDiv').style.display='none';document.getElementById('ExfundcompanynameSearchIframe').style.display='none';}}}/*用途:获取相似关键字*/functiongetConformKey(){varkeyValue=document.getElementById('saler').value.trim();//如果这次的查询关键字和上次的一样,则不去服务器重新获取相似关键字列表。if(keyValue!=oldKeyValuecompany){//关键字为空则不去服务器获取相似关键字列表if(keyValue==''){dwr.util.removeAllRows('showGuestList');setDropListVisible(false);initKeyListState();}else{//采用ajax异步模式获取相似关键字GuestBO.findAllName(keyValue,conformKeyCallback);}}}/*用途:获取关键字回调方法*/functionconformKeyCallback(keyList){dwr.util.removeAllRows('showGuestList');initKeyListState();if(keyList.length>0){//生成相似关键字提示框dwr.util.addRows('showGuestList',keyList,cellFuncs,{cellCreator:function(options){vartd=document.createElement("td");td.id='keyIdcompany'+tdCountcompany++;td.onmouseover=function(){selectedKeyIndexcompany=parseInt(this.id.substring(12,td.id.length));this.bgColor=selectedBgColorcompany;disSelectedOldKey();};td.onclick=function(){document.getElementById('saler').value=this.innerText;document.getElementById('saler').focus();setCursorLast(document.getElementById('saler'));GuestBO.getSearchName(this.innerText,callbaskguest);document.getElementById('guestlistDiv').style.display='none';document.getElementById('ExfundcompanynameSearchIframe').style.display='none';};returntd;},escapeHtml:false});setDropListVisible(true);}else{setDropListVisible(false);}}functioncallbackcode(data){varobjSelect=document.myform.contractno;if(data!=null){objSelect.length=0;for(vari=0;i<data.length;i++){varvarItem=newOption(data[i].contractcode,data[i].contractcode);objSelect.options.add(varItem);}}else{varvarItem=newOption('无',0);objSelect.options.add(varItem);}}functionSearchContract(){varobjSelect=document.myform.contractno;varisContract=document.myform.isContract;if(isContract.checked){document.getElementById('contractno').disabled=false;varsaler=document.getElementById('saler').value;contractJS.getcontractcode(saler,callbackcode);document.myform.isContract.value=1;}if(!isContract.checked){document.myform.isContract.value=0;document.getElementById('contractno').disabled=true;document.all("contractno").options.length=0;}}functionclearcompanyname(){varnames=document.myform.saler.value;GuestBO.findAllName(names,callbackscompany);}functioncallbackscompany(keyList){if(keyList==0){document.myform.saler.value='';}}functioncallbaskguest(data){if(data!=null){document.myform.saler.value=data.name;document.all("contractno").options.length=0;document.getElementById('contractno').disabled=true;document.getElementById('isContract').checked=false;}}/*用途:表格数据显示处理方法*/varcellFuncs=[function(data){returndata;}];/*用途:将输入框的光标移到最后*/functionsetCursorLast(inputObj){varinputRange=inputObj.createTextRange();inputRange.collapse(true);inputRange.moveStart('character',inputObj.value.length);inputRange.select();}/*用途:创建相似关键字列表框*/functioncreateShowDiv(){varshowIframeeExfundcompanyname=document.createElement("iframe");showIframeeExfundcompanyname.id="ExfundcompanynameSearchIframe";with(showIframeeExfundcompanyname.style){varoRect=document.getElementById('saler').getBoundingClientRect();left=oRect.left;top=oRect.top+20;//left=300;//top=300;width=283;border=listBordercompany;zIndex="1";position="absolute";display='none';backgroundColor=unselectedBgColorcompany;}showIframeeExfundcompanyname.onmouseover=function(){mouseLocation=1;};showIframeeExfundcompanyname.onmouseout=function(){mouseLocation=0;};document.body.appendChild(showIframeeExfundcompanyname);varshowDiv=document.createElement("div");showDiv.id="guestlistDiv";with(showDiv.style){varoRect=document.getElementById('saler').getBoundingClientRect();left=oRect.left;top=oRect.top+20;//left=300;//top=300;width=283;border=listBordercompany;zIndex="1";position="absolute";display='none';backgroundColor=unselectedBgColorcompany;}showDiv.onmouseover=function(){mouseLocationcompany=1;};showDiv.onmouseout=function(){mouseLocationcompany=0;};showDiv.innerHTML="<divstyle='width:100%;height:150px;overflow:auto;'><tableborder='0'style='width:100%;font-size:12;'><tbodyid='showGuestList'style='color:#000000;margin-left:0;margin-right:0;margin-bottom:0;margin-top:0;'></tbody></table></div>";document.body.appendChild(showDiv);initKeyListState();}/*用途:设置相似关键字列表框是否可见参数:isDisplay,true表示可见,false表示不可见*/functionsetDropListVisible(isDisplay){if(mouseLocationcompany==1){return;}if((document.getElementById('saler').value.trim()!='')&&(isDisplay==true)){document.getElementById('guestlistDiv').style.display='';document.getElementById('ExfundcompanynameSearchIframe').style.display='';}else{document.getElementById('guestlistDiv').style.display='none';document.getElementById('ExfundcompanynameSearchIframe').style.display='none';}}functiongetPosLeft(obj){varl=obj.offsetLeft;while(obj=obj.offsetParent){l+=obj.offsetLeft;}returnl;}functiongetPosTop(obj){varl=obj.offsetTop;while(obj=obj.offsetParent){l+=obj.offsetTop;}returnl;}
解决方案
解决方案二:
上面是导入的js页面<inputtype="text"id="saler"name="saler"class="wenziyu2"size="25"autocomplete="off"onKeyDown="oldKeyValuecompany=this.value.trim();setSelectedKey();"onKeyUp="getConformKey();"onFocus="createShowDiv();setDropListVisible(true);"onBlur="setDropListVisible(false);clearcompanyname();"style="width:280;height:20;z-index:10;top:0;left:0;"想要加入选中层的内容按上下键时滚动条随着光标移动,上面的还有很多小bug高手帮忙修改下