js实现带搜索功能的下拉框实时搜索实时匹配


Posted in Javascript onNovember 05, 2013

1. 当select输入框中每输入一点内容的时候,在option中找出与内容匹配的选项显示在option的前面选项中。
2. 如何获取每次输入的内容,当keyup的时候触发函数。
问题:select标签中可以输入内容吗?(解决:另一篇文章可选择和输入的下拉列表框 )
3. 如何获得输入框中的内容?(解决,在输入框上添加onkeyup时间触发的函数用js获得)
4. 如何匹配?(解决)
4.1 如何获得所有option中的内容?(解决)

function getSelectText() 
{ 
//获得所有select标签 
var object = document.getElementsByTagName('select'); 
//因为该html中只有一个select标签,所以就是name = "aabb"代表的标签 
var obj = object[0]; 
//alert(obj.length); 
//alert(obj[0]); 
//保存所有option 的值 
var allText; 
for(i=0;i<obj.length;i++) 
{ 
allText += obj[i].innerText+','; //关键是通过option对象的innerText属性获取到选项文本 
} 
return allText; 
}

4.2 js分割字符串?(解决)
var allText = getSelectText(); 
//alert(allText); 
// 每个option的内容分割开来 
var eachOptin = new Array(); 
eachOptin=allText.split(","); //字符分割

4.3 如何在js中匹配?
//如果option内容中有输入的内容就返回第一次匹配的位置(大于等于0),如果没有匹配的就返回-1 
var flag = eachOptin[i].indexOf(shuru) ;

5. 如何让匹配的内容显示在option的前面的选项?(通过改变option的index编号)( 解决)
方法:当查到匹配的选项的时候,将第一个option重新新增到select最后,然后,将第一个的值重置为匹配的option的值,然后删掉原始匹配的option
7. js 实现select标签右边三角的功能(未解决,当搜索之后,直接显示所有option选项可供选择)
8.在匹配的option选项有多个的时候出现bedug,注意测试,和重新修改一下,应该是上面第五条中的逻辑问题
代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>测试</title> 
<script> 
function onku() 
{ 
//获得input输入框的内容 
var shuru = document.getElementById('ccdd').value; 
var object = document.getElementsByTagName('select'); 
var obj = object[0]; 
//如果输入的内容为空,所有的选项都匹配 
if(shuru!= '') 
{ 
//alert(shuru); 
//获得option中的所有内容 
var allText = getSelectText(); 
//alert(allText); 
// 每个option的内容分割开来 
var eachOptin = new Array(); 
eachOptin=allText.split(","); //字符分割 
var f = 1; 
for (i=1;i<eachOptin.length-1 ;i++ ) 
{ 
//alert(eachOptin[i]); 
//如果option内容中有输入的内容就返回第一次匹配的位置(大于等于0),如果没有匹配的就返回-1 
var flag = eachOptin[i].indexOf(shuru) ; 
if(flag >=0) 
{ 
//alert(i); 
//将index为f的option重新新增一遍,显示在最后 
obj.options.add(new Option(obj[i].innerText,obj[f].value)); 
//将编号为f的option重新赋值,赋值为符合条件的第一个option 
obj.options[f]=new Option(eachOptin[i],eachOptin[i]); 
//删除最初存在的符合条件的option 
obj.remove(i); 
f++; 
} 
} 
} 
} 
function getSelectText() 
{ 
//获得所有select标签 
var object = document.getElementsByTagName('select'); 
//因为该html中只有一个select标签,所以就是name = "aabb"代表的标签 
var obj = object[0]; 
//alert(obj.length); 
//alert(obj[0]); 
//保存所有option 的值 
var allText; 
for(i=0;i<obj.length;i++) 
{ 
//alert(obj[i].index);//获得option的index编号 
//alert(obj[i].value);//获得option的value的值 
allText+= obj[i].innerText+','; //关键是通过option对象的innerText属性获取到选项文本 
} 
return allText; 
} 
</script> 
</head> <body> 
<span style=" position:absolute;border:1pt solid #c1c1c1; overflow:hidden;width:188px;height:19px;clip:rect(-1px 190px 190px 170px);"> 
<select name="aabb" id="aabb" style="width:190px;height:20px;margin:-2px;" 
onChange="javascript:document.getElementById('ccdd').value=document.getElementById('aabb').options[document.getElementById('aabb').selectedIndex].value;"> 
<option value="" style="color:#c2c2c2;">--请选择--</option> 
<option value="北京">北京</option> 
<option value="上海">上海</option> 
<option value="广州">广州</option> 
<option value="上123">上123</option> 
<option value="苏州">苏州</option> 
</select> 
</span> 
<span style="position:absolute; border:1pt solid #c1c1c1;border-left:1pt solid #c1c1c1;border-bottom:1pt solid #c1c1c1;width:170px;height:19px;"> 
<input type="text" name="ccdd" id="ccdd" value="可选择也可输入的下拉框" style="width:170px;height:15px;border:0pt;" onkeyup="onku()"> 
</span> 
</body> 
</html>

注意代码中的注释
上面代码的运行结果如下:
js实现带搜索功能的下拉框实时搜索实时匹配
Javascript 相关文章推荐
JavaScript 学习初步 入门教程
Mar 25 Javascript
js列举css中所有图标的实现代码
Jul 04 Javascript
javascript开发随笔一 preventDefault的必要
Nov 25 Javascript
13 个JavaScript 性能提升技巧分享
Jul 26 Javascript
JS继承--原型链继承和类式继承
Apr 08 Javascript
网页前端优化之滚动延时加载图片示例
Jul 13 Javascript
JavaScript DOM进阶方法
Apr 13 Javascript
JS解决移动web开发手机输入框弹出的问题
Mar 31 Javascript
JS去掉字符串前后空格、阻止表单提交的实现代码
Jun 08 Javascript
JavaScript Date对象应用实例分享
Oct 30 Javascript
Vant picker 多级联动操作
Nov 02 Javascript
vue+Element-ui前端实现分页效果
Nov 15 Javascript
查看大图功能代码jquery版
Nov 05 #Javascript
使用jquery自定义鼠标样式满足个性需求
Nov 05 #Javascript
iframe子页面获取父页面元素的方法
Nov 05 #Javascript
jquery统计复选框选中示例
Nov 05 #Javascript
jquery实现滑动图片自己测试的例子
Nov 05 #Javascript
用js实现in_array的方法
Nov 05 #Javascript
jquery遍历数组与筛选数组的方法
Nov 05 #Javascript
You might like
用PHP生成静态HTML速度快类库
2007/03/18 PHP
解决FastCGI 进程超过了配置的活动超时时限的问题
2013/07/03 PHP
在openSUSE42.1下编译安装PHP7 的方法
2015/12/24 PHP
Nigma vs Alliance BO5 第五场2.14
2021/03/10 DOTA
页面元素绑定jquery toggle后元素隐藏的解决方法
2014/03/27 Javascript
node.js中的fs.fsyncSync方法使用说明
2014/12/15 Javascript
jquery插件jSignature实现手动签名
2015/05/04 Javascript
JavaScript实现添加、查找、删除元素
2015/07/02 Javascript
JavaScript编写点击查看大图的页面半透明遮罩层效果实例
2016/05/09 Javascript
阻止表单提交按钮多次提交的完美解决方法
2016/05/16 Javascript
关于动态生成dom绑定事件失效的原因及解决方法
2016/08/06 Javascript
强大Vue.js组件浅析
2016/09/12 Javascript
微信小程序 数据遍历的实现
2017/04/05 Javascript
Angular2下使用pdf插件的方法详解
2017/04/29 Javascript
Angularjs渲染的 using 指令的星级评分系统示例
2017/11/09 Javascript
Angular中管道操作符(|)的使用方法
2017/12/15 Javascript
深入了解JavaScript 防抖和节流
2019/09/12 Javascript
使用 Github Actions 自动部署 Angular 应用到 Github Pages的方法
2020/07/20 Javascript
python连接mysql调用存储过程示例
2014/03/05 Python
Python使用urllib2模块实现断点续传下载的方法
2015/06/17 Python
tensorflow: 查看 tensor详细数值方法
2018/06/13 Python
使用Python打造一款间谍程序的流程分析
2020/02/21 Python
Python可以实现栈的结构吗
2020/05/27 Python
pycharm sciview的图片另存为操作
2020/06/01 Python
Python实现简单的猜单词小游戏
2020/10/28 Python
HTML5+CSS3:3D展示商品信息示例
2017/01/03 HTML / CSS
GNC健安喜美国官网:美国第一营养品牌
2016/07/22 全球购物
Oakley西班牙官方商店:太阳眼镜和男女运动服
2019/04/26 全球购物
杭州-DOTNET笔试题集
2013/09/25 面试题
JAVA程序设计笔试题面试题一套
2015/07/28 面试题
宿舍违规用电检讨书
2014/02/16 职场文书
节约用水标语
2014/06/11 职场文书
幼儿园标语大全
2014/06/19 职场文书
大班下学期幼儿评语
2014/12/30 职场文书
优秀大学生自荐信
2015/03/26 职场文书
酒店总经理岗位职责
2015/04/01 职场文书