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+css 网页每次加载不同样式的实现方法
Dec 27 Javascript
JS返回上一页实例代码通过图片和按钮分别实现
Aug 16 Javascript
js操作IE浏览器弹出浏览文件夹可以返回目录路径
Jul 14 Javascript
浅谈Javascript变量作用域问题
Dec 16 Javascript
JavaScript高级程序设计(第三版)学习笔记1~5章
Mar 11 Javascript
原生JavaScript制作微博发布面板效果
Mar 11 Javascript
从重置input file标签中看jQuery的 .val() 和 .attr(“value”) 区别
Jun 12 Javascript
详解使用Node.js 将txt文件转为Excel文件
Jul 05 Javascript
JavaScript如何获取到导航条中HTTP信息
Oct 10 Javascript
vue-cli初始化项目中使用less的方法
Aug 09 Javascript
Vue监听一个数组id是否与另一个数组id相同的方法
Sep 26 Javascript
Vue实现表格批量审核功能实例代码
May 28 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
基于mysql的论坛(4)
2006/10/09 PHP
php设计模式 Prototype (原型模式)代码
2011/06/26 PHP
PHP使用curl制作简易百度搜索
2016/11/03 PHP
父子窗体间传递JSON格式的数据的代码
2010/12/25 Javascript
Javascript图像处理—虚拟边缘介绍及使用方法
2012/12/27 Javascript
JQuery中$(document)是什么意思有什么作用
2014/07/21 Javascript
理解javascript中的原型和原型链
2015/07/30 Javascript
js实现的黑背景灰色二级导航菜单效果代码
2015/08/24 Javascript
js数组的五种迭代方法及两种归并方法(推荐)
2016/06/14 Javascript
js实现动态创建的元素绑定事件
2016/07/19 Javascript
用headjs来管理和加载js 提高网站加载速度
2016/11/29 Javascript
mui开发中获取单选按钮、复选框的值(实例讲解)
2017/07/24 Javascript
vue 开发企业微信整合案例分析
2019/12/02 Javascript
jquery添加div实现消息聊天框
2020/02/08 jQuery
王纯业的Python学习笔记 下载
2007/02/10 Python
详解flask入门模板引擎
2018/07/18 Python
对python中字典keys,values,items的使用详解
2019/02/03 Python
Python SQLAlchemy入门教程(基本用法)
2019/11/11 Python
Python paramiko 模块浅谈与SSH主要功能模拟解析
2020/02/29 Python
Python+redis通过限流保护高并发系统
2020/04/15 Python
python ssh 执行shell命令的示例
2020/09/29 Python
西班牙鞋子和箱包在线销售网站:zapatos.es
2020/02/17 全球购物
为什么说Ruby是一种真正的面向对象程序设计语言
2012/10/30 面试题
应届毕业生求职自荐书
2014/01/03 职场文书
白酒营销策划方案
2014/08/17 职场文书
党员批评与自我批评
2014/10/15 职场文书
2015出纳试用期工作总结
2014/12/12 职场文书
2015年银行工作总结范文
2015/04/01 职场文书
行政主管岗位职责范本
2015/04/09 职场文书
生活委员竞选稿
2015/11/21 职场文书
关于实现中国梦的心得体会
2016/01/05 职场文书
HTML基础-标签分类(闭合标签,空标签,块级元素,行内元素,行级块元素,可替换元素)
2021/03/31 HTML / CSS
基于Redis zSet实现滑动窗口对短信进行防刷限流的问题
2022/02/12 Redis
最新最全的手机号验证正则表达式
2022/02/24 Javascript
20180830晚上第一届KSL半决赛 雨神vs解冻(二龙 三炮解说)
2022/04/01 星际争霸
html中两种获取标签内的值的方法
2022/06/16 jQuery