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 相关文章推荐
飞鱼(shqlsl) javascript作品集
Dec 16 Javascript
基于Jquery的温度计动画效果
Jun 18 Javascript
JavaScript 一道字符串分解的题目
Aug 03 Javascript
jquery实现图片水平滚动效果代码分享
Aug 26 Javascript
javascript实现3D切换焦点图
Oct 16 Javascript
纯javascript移动优先的幻灯片效果
Nov 02 Javascript
底部悬浮通栏可以关闭广告位的实现方法
Jun 01 Javascript
基于JS实现回到页面顶部的五种写法(从实现到增强)
Sep 03 Javascript
js正则表达式验证表单【完整版】
Mar 06 Javascript
JS表格组件神器bootstrap table使用指南详解
Apr 12 Javascript
使用vue构建一个上传图片表单
Jul 04 Javascript
关于vue中的ajax请求和axios包问题
Apr 19 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
destoon实现首页显示供应、企业、资讯条数的方法
2014/07/15 PHP
php设计模式之委托模式
2016/02/13 PHP
laravel异步监控定时调度器实例详解
2019/06/21 PHP
JQuery的Ajax请求实现局部刷新的简单实例
2014/02/11 Javascript
举例讲解JavaScript中将数组元素转换为字符串的方法
2015/10/25 Javascript
老生常谈 js中this的指向
2016/06/30 Javascript
JS for循环中i++ 和 ++i的区别介绍
2016/07/20 Javascript
Angular和百度地图的结合实例代码
2016/10/19 Javascript
vue.js全局API之nextTick全面解析
2017/07/07 Javascript
js保留两位小数方法总结
2018/01/31 Javascript
微信小程序实现手势滑动卡片效果
2019/08/26 Javascript
在Angular中实现一个级联效果的下拉框的示例代码
2020/05/20 Javascript
js实现三角形粒子运动
2020/09/22 Javascript
基于Vue2实现移动端图片上传、压缩、拖拽排序、拖拽删除功能
2021/01/05 Vue.js
Python 中迭代器与生成器实例详解
2017/03/29 Python
python使用KNN算法手写体识别
2018/02/01 Python
Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
2018/03/19 Python
Python爬虫工程师面试问题总结
2018/03/22 Python
python 读取txt,json和hdf5文件的实例
2018/06/05 Python
Python图像处理之简单画板实现方法示例
2018/08/30 Python
python获取中文字符串长度的方法
2018/11/14 Python
python获取磁盘号下盘符步骤详解
2019/06/19 Python
django框架model orM使用字典作为参数,保存数据的方法分析
2019/06/24 Python
Python3 filecmp模块测试比较文件原理解析
2020/03/23 Python
解决python虚拟环境切换无效的问题
2020/04/30 Python
如何使用python写截屏小工具
2020/09/29 Python
CSS3 mask 遮罩的具体使用方法
2017/11/03 HTML / CSS
Public Desire美国/加拿大:全球性的在线鞋类品牌
2018/12/17 全球购物
专业求职信撰写要诀
2014/02/18 职场文书
英语教师岗位职责
2014/03/16 职场文书
环保志愿者活动方案
2014/08/14 职场文书
离婚协议书应该怎么写
2014/10/12 职场文书
幼儿园食品安全责任书
2015/05/08 职场文书
匿名信格式范文
2015/05/27 职场文书
地震捐款简报
2015/07/21 职场文书
Docker 镜像介绍以及commit相关操作
2022/04/13 Servers