测试代码:
<HTML>
<HEAD>
<TITLE>可根据输入匹配选项</TITLE>
</HEAD>
<Script Language="JavaScript">
<!--
var whichText;
function selectStation(obj) {
var objSelStation = obj;
if (obj.selectedIndex != -1) {
var stationName = obj.options[obj.selectedIndex].text;
whichText.value = stationName;
}
showDivStation(this, false,'selStation')//鼠标单击某一选项选定后关闭下拉框
}//响应text的事件
var pageD =0, pageU;
function similarFind(txtObj,seledName) {
var curStationName = (txtObj.value).toUpperCase();
var objSelStation = eval("document.myform."+seledName);//根据实际的form name修改
var stationLength = objSelStation.options.length;
pageU = pageD;
//匹配用text中的数据跟下拉框中的数据
for (var i=0; i<stationLength; i++) {
var stationName = objSelStation.options[i].text;
var re = new RegExp("^" + curStationName);
if (stationName.match(re)) {
if (i<stationLength - 10) {
objSelStation.selectedIndex = i + 10;
}
objSelStation.selectedIndex = i;
pageD = i;
pageU = i;
break;
}
}
//响应下移键
if(event.keyCode==40) {
pageD++;
if(pageD==objSelStation.options.length) pageD=0;
txtObj.value=objSelStation.options[pageD].text ;
objSelStation.selectedIndex = pageD;
}
//响应上移键
if(event.keyCode==38) {
--pageU;
if(pageU<0) pageU=objSelStation.options.length-1;
txtObj.value = objSelStation.options[pageU].text;
objSelStation.selectedIndex = pageU;
}
}
//下拉框显示位置
function showDivStation(obj, b,selName) {
var divStation = eval("document.myform."+selName);//根据实际的form name修改
if (b) {
whichText = obj;
divStation.style.top = 20;
divStation.style.left = 0;
divStation.style.display="block";
similarFind(obj,selName);
} else {
divStation.style.display="none";
}
}
//-->
</Script>
<BODY bgcolor="#FFFFFF" topmargin="0" leftmargin="0">
<form name="myform" >
<table border="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1">
<tr>
<td width="6%" valign="top">城市</TD>
<td width="94%" bgcolor="#FFFFFF">
<!-- onfocus获取焦点时弹出下拉框 onkeyup按上下键时在下拉框中移动 -->
<input type="text" size="70" name="put" style="width:120" onfocus="showDivStation(this, true,'selStation')" onkeyup="similarFind(this,'selStation')" value="">
<!-- onclick鼠标点击时选择选项 -->
<select name="selStation" size="6" style="display:none;width:120;" onclick="selectStation(this)">
<option>AA</option>
<option>BB</option>
<option >湖北</option>
<option>湖南</option>
<option >广东</option>
<option >CC</option>
<option >C C</option>
<option >C C</option>
<option >C C</option>
</select>
</td>
</table>
</form>
</BODY>
</HTML>现在问题如果输入C C怎么匹配到<option >C C</option>
就是输入C后面有是三个空格再加上C要匹配到下拉框里的数据?
<HTML>
<HEAD>
<TITLE>可根据输入匹配选项</TITLE>
</HEAD>
<Script Language="JavaScript">
<!--
var whichText;
function selectStation(obj) {
var objSelStation = obj;
if (obj.selectedIndex != -1) {
var stationName = obj.options[obj.selectedIndex].text;
whichText.value = stationName;
}
showDivStation(this, false,'selStation')//鼠标单击某一选项选定后关闭下拉框
}//响应text的事件
var pageD =0, pageU;
function similarFind(txtObj,seledName) {
var curStationName = (txtObj.value).toUpperCase();
var objSelStation = eval("document.myform."+seledName);//根据实际的form name修改
var stationLength = objSelStation.options.length;
pageU = pageD;
//匹配用text中的数据跟下拉框中的数据
for (var i=0; i<stationLength; i++) {
var stationName = objSelStation.options[i].text;
var re = new RegExp("^" + curStationName);
if (stationName.match(re)) {
if (i<stationLength - 10) {
objSelStation.selectedIndex = i + 10;
}
objSelStation.selectedIndex = i;
pageD = i;
pageU = i;
break;
}
}
//响应下移键
if(event.keyCode==40) {
pageD++;
if(pageD==objSelStation.options.length) pageD=0;
txtObj.value=objSelStation.options[pageD].text ;
objSelStation.selectedIndex = pageD;
}
//响应上移键
if(event.keyCode==38) {
--pageU;
if(pageU<0) pageU=objSelStation.options.length-1;
txtObj.value = objSelStation.options[pageU].text;
objSelStation.selectedIndex = pageU;
}
}
//下拉框显示位置
function showDivStation(obj, b,selName) {
var divStation = eval("document.myform."+selName);//根据实际的form name修改
if (b) {
whichText = obj;
divStation.style.top = 20;
divStation.style.left = 0;
divStation.style.display="block";
similarFind(obj,selName);
} else {
divStation.style.display="none";
}
}
//-->
</Script>
<BODY bgcolor="#FFFFFF" topmargin="0" leftmargin="0">
<form name="myform" >
<table border="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1">
<tr>
<td width="6%" valign="top">城市</TD>
<td width="94%" bgcolor="#FFFFFF">
<!-- onfocus获取焦点时弹出下拉框 onkeyup按上下键时在下拉框中移动 -->
<input type="text" size="70" name="put" style="width:120" onfocus="showDivStation(this, true,'selStation')" onkeyup="similarFind(this,'selStation')" value="">
<!-- onclick鼠标点击时选择选项 -->
<select name="selStation" size="6" style="display:none;width:120;" onclick="selectStation(this)">
<option>AA</option>
<option>BB</option>
<option >湖北</option>
<option>湖南</option>
<option >广东</option>
<option >CC</option>
<option >C C</option>
<option >C C</option>
<option >C C</option>
</select>
</td>
</table>
</form>
</BODY>
</HTML>现在问题如果输入C C怎么匹配到<option >C C</option>
就是输入C后面有是三个空格再加上C要匹配到下拉框里的数据?
解决方案 »
- 关于js下拉菜单的问题
- 一个简单的JS函数
- 很急的问题,希望有高手能帮忙解决(急!!!!!很急!!!!!)
- javascript怎么弹出“类似于模式对话框”的登录窗口,要求没有关闭按钮
- 各位英雄女侠可否帮一下忙啊!!!!!!
- JS如何在子框架内设置父框架的同级框架里的属性。
- 求助:一段JS代码
- showModalDialog最小化
- javascript:history.back()问题
- 一个奇怪的window.open()问题??????
- 如何给jqgrid导航栏增加自定义按钮及其事件
- contentType="application/vnd.ms-excel"类型的jsp文件是不是不支持javascript脚本?
匹配不到吗?
<HEAD>
<TITLE>可根据输入匹配选项</TITLE>
</HEAD>
<Script Language="JavaScript">
<!--
var whichText;
function selectStation(obj) {
var objSelStation = obj;
if (obj.selectedIndex != -1) {
var stationName = obj.options[obj.selectedIndex].text;
whichText.value = stationName;
}
showDivStation(this, false,'selStation')//鼠标单击某一选项选定后关闭下拉框
}//响应text的事件
var pageD =0, pageU;
function similarFind(txtObj,seledName) {
var curStationName = (txtObj.value).toUpperCase();
var objSelStation = eval("document.myform."+seledName);//根据实际的form name修改
var stationLength = objSelStation.options.length;
pageU = pageD;
//匹配用text中的数据跟下拉框中的数据
for (var i=0; i<stationLength; i++) {
var stationName = objSelStation.options[i].text;
//var re = new RegExp("^" + curStationName);
curStationName=curStationName.replace(/ /g,'\xa0');
if (stationName.indexOf(curStationName)==0) {
if (i<stationLength - 10) {
objSelStation.selectedIndex = i + 10;
}
objSelStation.selectedIndex = i;
pageD = i;
pageU = i;
break;
}
}
//响应下移键
if(event.keyCode==40) {
pageD++;
if(pageD==objSelStation.options.length) pageD=0;
txtObj.value=objSelStation.options[pageD].text ;
objSelStation.selectedIndex = pageD;
}
//响应上移键
if(event.keyCode==38) {
--pageU;
if(pageU<0) pageU=objSelStation.options.length-1;
txtObj.value = objSelStation.options[pageU].text;
objSelStation.selectedIndex = pageU;
}
}
//下拉框显示位置
function showDivStation(obj, b,selName) {
var divStation = eval("document.myform."+selName);//根据实际的form name修改
if (b) {
whichText = obj;
divStation.style.top = 20;
divStation.style.left = 0;
divStation.style.display="block";
similarFind(obj,selName);
} else {
divStation.style.display="none";
}
}
//-->
</Script>
<BODY bgcolor="#FFFFFF" topmargin="0" leftmargin="0">
<form name="myform" >
<table border="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1">
<tr>
<td width="6%" valign="top">城市</TD>
<td width="94%" bgcolor="#FFFFFF">
<!-- onfocus获取焦点时弹出下拉框 onkeyup按上下键时在下拉框中移动 -->
<input type="text" size="70" name="put" style="width:120" onfocus="showDivStation(this, true,'selStation')" onkeyup="similarFind(this,'selStation')" value="">
<!-- onclick鼠标点击时选择选项 -->
<select name="selStation" size="6" style="display:none;width:120;" onclick="selectStation(this)">
<option>AA</option>
<option>BB</option>
<option >湖北</option>
<option>湖南</option>
<option >广东</option>
<option >CC</option>
<option >C C</option>
<option >C C</option>
<option >C C</option>
</select>
</td>
</table>
</form>
</BODY>
</HTML>
下拉框里的数据是从数据库里取的,没有 的。
下拉框里的数据是从数据库里取的,没有 的。
那你输出的时候最好转成 htmlCode ,不然多格就不起作用了
一定要读取数据库输出时要转成htmlCode吗?那没有什么好的方法了吗。还有个小问题:在点击文本框时下拉框就自动打开,但有什么办法不选择下拉框数据时鼠标在文本框外边一点击就关闭或退出下拉框。
一定要读取数据库输出时要转成htmlCode吗?那没有什么好的方法了吗。还有个小问题:在点击文本框时下拉框就自动打开,但有什么办法不选择下拉框数据时鼠标在文本框外边一点击就关闭或退出下拉框。web后台语言应该都有想对应的转码函数吧
1,如果你 option 里的value属性没用,可以写在value里,用value属性做判断,这样在显示的时时候还是没法体现多空格
2,后台生成JS,让JS来生成 option
//JS里加上这段 关闭 拉框
document.onmouseup=function(evt){
var evt=window.event||evt;
var el=evt.target||evt.srcElement;
if(el.name!='put' && el.name!='selStation' ){
document.myform.selStation.style.display='none';
}
}
<option value='AA'>AA</option>
<option value='BB'>BB</option>
<option value='湖北'>湖北</option>
<option value='湖南'>湖南</option>
<option value='广东'>广东</option>
<option value='CC'>CC</option>
<option value='C C'>C C</option>
<option value='C C'>C C</option>
<option value='C C'>C C</option>
</select>改完html代码后,将similarFind方法修改成如下即可:function similarFind(txtObj, seledName) {
var curStationName = (txtObj.value).toUpperCase();
var objSelStation = eval("document.myform." + seledName); //根据实际的form name修改
var stationLength = objSelStation.options.length;
pageU = pageD; //匹配用text中的数据跟下拉框中的数据
for (var i = 0; i < stationLength; i++) {
var stationName = objSelStation.options[i].value;
var re = new RegExp("^" + curStationName);
if (stationName.match(re)) {
if (i < stationLength - 10) {
objSelStation.selectedIndex = i + 10;
}
objSelStation.selectedIndex = i;
pageD = i;
pageU = i;
break;
}
}
//响应下移键
if (event.keyCode == 40) {
pageD++;
if (pageD == objSelStation.options.length) pageD = 0;
txtObj.value = objSelStation.options[pageD].text;
objSelStation.selectedIndex = pageD;
}
//响应上移键
if (event.keyCode == 38) {
--pageU;
if (pageU < 0) pageU = objSelStation.options.length - 1;
txtObj.value = objSelStation.options[pageU].text;
objSelStation.selectedIndex = pageU;
}
}
//JS里加上这段 关闭 拉框
document.onmouseup=function(evt){
var evt=window.event||evt;
var el=evt.target||evt.srcElement;
if(el.name!='put' && el.name!='selStation' ){
document.myform.selStation.style.display='none';
}
}
加上这段代码后能实现鼠标在文本框外边一点击就关闭或退出下拉框,但现在又发现一个问题如果在文本框输的内容错后左击鼠标键拖选到文本框外再放开鼠标左键,这时下拉框也没有了。只有在文本框外点击一下后,再点击文本框内下拉框就出来了。
有没有办法出现上面这种情况后只要删除被选中的内容后下拉框就自动出来。
改了下,只有点击除 输入框,下拉框外,才能关闭 var isMDown;
document.onmouseup=document.onmousedown=function(evt){
var evt=window.event||evt;
var el=evt.target||evt.srcElement;
if(el.name!='put' && el.name!='selStation' ){
if(evt.type=='mousedown'){
isMDown=1;
return ;
}else if(isMDown){
document.myform.selStation.style.display='none';
isMDown=0
}
}
}