下拉菜单中英文数字首字匹配 本人已搞定汉字匹配,数字,字母的搞不定请大虾看看<script src=qswhGB2312.js></script>
<br>输入名字的首字缩写即可找到,如张三火(zsh)
<select name="username" onkeydown=spellList() onchange=alert(this[selectedIndex].sp)>
<option value="1">张三</option>
<option value="2">张三火</option>
<option value="2">张2</option>
<option value="2">张3</option>
<option value="2">张4</option>
<option value="3">李四</option>
<option value="4">李四水</option>
<option value="4">王</option>
<option value="4">王2</option>
<option value="4">王3</option>
<option value="4">1</option>
<option value="4">2</option>
</select><script>
var sel="",timer=null;
function spellList(){
/********(qiushuiwuhen 2002-9-20)***********/
with(window.event){
with(srcElement){
if(keyCode<48)return;
if(keyCode>95)keyCode-=48
sel+=String.fromCharCode(keyCode);
window.status=sel;
// alert(String.fromCharCode(keyCode));
if(midstr(sel)==1)
{
selectedIndex=options.selectedIndex+1;
}
else{
//alert(length);
for(i=0;i<length;i++){
if(!options[i].sp){
var tmp="",arr=getSpell(options[i].text,"'").split("'")
for(var j=0;j<arr.length;j++)tmp+=arr[j].substr(0,1).toUpperCase();
options[i].sp=tmp;
}
//alert(options[i].sp);
if(options[i].sp.indexOf(String.fromCharCode(keyCode))==0){selectedIndex=i;break;}
}
}
}
returnValue=false;
clearTimeout(timer)
timer=setTimeout("sel=''",1000);
}
}
function midstr(tempstr){
var x=0;
if (tempstr.length>1)
{
if (tempstr.substr(tempstr.length-1,1)==tempstr.substr(tempstr.length-2,1) )
{
return 1;
}
else{return 0;}
}
else{return 0;}
}
</script>
<br>输入名字的首字缩写即可找到,如张三火(zsh)
<select name="username" onkeydown=spellList() onchange=alert(this[selectedIndex].sp)>
<option value="1">张三</option>
<option value="2">张三火</option>
<option value="2">张2</option>
<option value="2">张3</option>
<option value="2">张4</option>
<option value="3">李四</option>
<option value="4">李四水</option>
<option value="4">王</option>
<option value="4">王2</option>
<option value="4">王3</option>
<option value="4">1</option>
<option value="4">2</option>
</select><script>
var sel="",timer=null;
function spellList(){
/********(qiushuiwuhen 2002-9-20)***********/
with(window.event){
with(srcElement){
if(keyCode<48)return;
if(keyCode>95)keyCode-=48
sel+=String.fromCharCode(keyCode);
window.status=sel;
// alert(String.fromCharCode(keyCode));
if(midstr(sel)==1)
{
selectedIndex=options.selectedIndex+1;
}
else{
//alert(length);
for(i=0;i<length;i++){
if(!options[i].sp){
var tmp="",arr=getSpell(options[i].text,"'").split("'")
for(var j=0;j<arr.length;j++)tmp+=arr[j].substr(0,1).toUpperCase();
options[i].sp=tmp;
}
//alert(options[i].sp);
if(options[i].sp.indexOf(String.fromCharCode(keyCode))==0){selectedIndex=i;break;}
}
}
}
returnValue=false;
clearTimeout(timer)
timer=setTimeout("sel=''",1000);
}
}
function midstr(tempstr){
var x=0;
if (tempstr.length>1)
{
if (tempstr.substr(tempstr.length-1,1)==tempstr.substr(tempstr.length-2,1) )
{
return 1;
}
else{return 0;}
}
else{return 0;}
}
</script>
下载 qswhGB2312.js js文件
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>test</title>
</head><body>
<script src="http://www.showtui.com/qswhGB2312.js"></script>
<br>输入名字的首字缩写即可找到,如张三火(zsh)
<select name="username" onkeydown=spellList() onchange=alert(this[selectedIndex].sp)>
<option value="1">张三</option>
<option value="2">张三火</option>
<option value="2">张2</option>
<option value="2">张3</option>
<option value="2">张4</option>
<option value="3">李四</option>
<option value="4">李四水</option>
<option value="4">王</option>
<option value="4">王2</option>
<option value="4">王3</option>
<option value="4">1</option>
<option value="4">2</option>
</select><script>
var sel="",timer=null;
function spellList(){
/********(qiushuiwuhen 2002-9-20)***********/
with(window.event){
with(srcElement){
if(keyCode<48)return;
if(keyCode>95)keyCode-=48
sel+=String.fromCharCode(keyCode);
window.status=sel;
// alert(String.fromCharCode(keyCode));
if(midstr(sel)==1)
{
selectedIndex=options.selectedIndex+1;
}
else{
//alert(length);
for(i=0;i<length;i++){
if(!options[i].sp){
var tmp="";
var arr = [];
for(var k=0;k<options[i].text.length;k++){
if(options[i].text.charCodeAt(k)>128){
arr.push(getSpell(options[i].text.charAt(k)));
}else{
arr.push(options[i].text.charAt(k));
}
}
for(var j=0;j<arr.length;j++)tmp+=arr[j].substr(0,1).toUpperCase();
options[i].sp=tmp;
}
//alert(options[i].sp);
if(options[i].sp.indexOf(String.fromCharCode(keyCode))==0){selectedIndex=i;break;}
}
}
}
returnValue=false;
clearTimeout(timer)
timer=setTimeout("sel=''",1000);
}
}
function midstr(tempstr){
var x=0;
if (tempstr.length>1)
{
if (tempstr.substr(tempstr.length-1,1)==tempstr.substr(tempstr.length-2,1) )
{
return 1;
}
else{return 0;}
}
else{return 0;}
}
</script></body></html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
function fn(s){
var opts=document.getElementById("slt");
var pattern=new RegExp("^"+s,"i");
for(var i=0;i<opts.length;i++){
if(pattern.test(opts[i].text)){
opts[i].selected=true;
return true;
}
}
return false;
}
//-->
</SCRIPT>
</HEAD> <BODY>
<input type="text" onkeyup="fn(this.value)"/><br/>
<select id="slt" size="10">
<option>a</option>
<option>ab</option>
<option>abc</option>
<option>abcd</option>
<option>0</option>
<option>012</option>
<option>0123456</option>
</select>
</BODY>
</HTML>
lihui_shine 这位比如我输入z会查找z相关的汉字和字母,我想连续输入z只在匹配上的汉字和字母间循环,而不是直接跳到下一个。谢谢大侠shanlilaide 这位大侠。我想连汉字也匹配上。不单纯字符数字
我只是将字母和数字也加到option的sp属性其实LZ说的也不难实现,只需要判断输入字符,如果是字母的话,找下一个以汉字或字母开头的就可以了
其实是在循环中匹配,检查每个text是否匹配汉字匹配你不是搞定了么,只要在你的代码里加入这个就应该行了吧
我举个例子
比如有个人叫周丽丽,当输入ZLL时,按楼主的意义,显然匹配不到周丽丽,而是找以L开头的去了这样你们总监肯定又不答应了^_^