自定义下拉列表(使用原始的事件监听机制),在搜索框中使用
目录
背景:
效果:
注意事项:
完整代码:
背景:
搜索框中需要使用到动态获取热点搜索历史的功能,此时需要自定义下拉列表。select组件不能完全满足要求。
搜索框下拉列表支持键盘上下键及回车选择,也支持鼠标单击选择,功能与select组件类似。
效果:
注意事项:
1、引用的 jquery请根据需要重新设置(可引用本地文件或服务器文件):
<script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js">
2、尽量避免使用全局监听,应使用局部监听。因为全局监听事件很容易与局部组件监听事件冲突,需要特别注意,不得已的情况下全局监听事件中可增加排除(避免影响局部监听)判断。
例如:
if ( ($("#city_list").css("display") == "block") && ($(target).attr("id") && $(target).attr("id")!="city_input" ) )
3、鼠标键盘事件的使用让开发更灵活,但也需要更多的代码来实现。同样的下拉列表,使用select组件就简单得多。请参见:CSDNhttps://mp.csdn.net/mp_blog/creation/editor/122902336
4、输入框改为回车监听更适合搜索框场景,本文为了简化操作,使用的鼠标单击显示下拉列表:
//输入框绑定单击事件,显示下拉列表$("#city_input").on("click", function(event){event.preventDefault();//alert("输入框被点击了。");$.fn.show_list(); //获取城市列表并显示到下拉列表中});
完整代码:
<html>
<head>
<script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js">
</script><title>自定义下拉列表</title><style>
/* 输入框样式 */
#city_input{width: 9rem;
}/* 下拉列表样式 */
.div_list {width: 12rem;border-radius: 0.3rem;border: 1px solid #ccc;box-shadow: 0 1px 6px 0 rgb(0 0 0 / 15%);box-sizing: border-box;
}/* 下拉列表每一个选项样式*/ .a_city:hover {background-color: #0DC;color: #fff;
}.hover {background-color: #0DC;color: #fff;
}</style></head>
<body id="my_body"><form id="myform">城市: <input id="city_input" type="text" name="citys" autocomplete="off" ><div id="city_list" style="display:none" class="div_list"></div><form>
<body><script>var citys = ["北京", "上海", "广州", "深圳"];//定义函数:获取城市列表并显示到下拉列表中$.fn.show_list = function(){var eles_city = "";//获取城市列表,构造选项添加到ele_city_list中,作为子节点。for(let item of citys) {console.log(item);ele_a_city = '<div class="a_city">'+ item + '</div>'eles_city = eles_city.concat(ele_a_city); //字符串拼接,或者使用 +,不能像Python一样 +=,}$("#city_list").html(eles_city);$("#city_list").css("display", "block");};//输入框绑定单击事件,显示下拉列表$("#city_input").on("click", function(event){event.preventDefault();//alert("输入框被点击了。");$.fn.show_list(); //获取城市列表并显示到下拉列表中});//城市列表中的每一个元素(div)绑定单击事件,将值填入输入框中$("#city_list").on("click", "div", function(){//alert("选项被点击了。");//console.log(this.innerText);$("#city_input").val(this.innerText);$("#city_list").css("display", "none"); //隐藏下拉列表});//监听键盘事件,支持方向键(上下滚动)和回车键(选择选项)$("#city_input").on('keydown',function(event){ //监听事件尽量不用 "body" 或 document ,精确到具体组件if ($("#city_list").css("display") == "block"){event.preventDefault();//阻止元素发生默认的行为(默认回车后会清空输入框)var upDownClickNum = $("#city_list .hover ").length; //当前悬浮的选项个数//alert(obj.innerText)switch(event.keyCode) {case 13: //回车选择选项var selectd_items = $("#city_list .hover");if (selectd_items[0]){$("#city_input").val(selectd_items[0].innerText);//alert(selectd_items[0].innerText)$("#city_list").css("display", "none"); //隐藏下拉列表}break;case 38: //alert("键盘事件,向上。");if (upDownClickNum < 1) {$("#city_list div:last").addClass("hover");} else {$("#city_list .hover").removeClass("hover").prev().addClass("hover");}break;case 40://alert("键盘事件,向下。");if (upDownClickNum < 1) {$("#city_list div:first").addClass("hover");} else {$("#city_list .hover").removeClass("hover").next().addClass("hover");}break; defaults:return;}}});//监听全局( document )的鼠标单击事件,隐藏下拉列表 $(document).on("click", function(event){var e = event || window.event //event兼容写法var target = e.target || e.srcElement //target兼容写法if ( ($("#city_list").css("display") == "block") && ($(target).attr("id") && $(target).attr("id")!="city_input" ) ){$("#city_list").css("display", "none"); //隐藏下拉列表//$("#city_list").hide(); // 功能相同:隐藏组件}});</script></html>
自定义下拉列表(使用原始的事件监听机制),在搜索框中使用相关推荐
- springBoot启动事件监听机制
springBoot启动之事件监听机制源码解析 1. Java的事件监听机制 在进行正式的分析之前,先介绍一下Java的事件监听机制.参考05–SpringBoot启动之事件监听机制 Java事件监听 ...
- Spring5源码 - 12 Spring事件监听机制_异步事件监听应用及源码解析
文章目录 Pre 实现原理 应用 配置类 Event事件 事件监听 EventListener 发布事件 publishEvent 源码解析 (反推) Spring默认的事件广播器 SimpleApp ...
- Spring5源码 - 11 Spring事件监听机制_源码篇
文章目录 pre 事件监听机制的实现原理[观察者模式] 事件 ApplicationEvent 事件监听者 ApplicationEvent 事件发布者 ApplicationEventMultica ...
- Ⅵ:zookeeper的Watcher事件监听机制
2021最新zookeeper系列 ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤ ...
- 事件监听机制(一)Java事件监听
事件监听机制(一)Java事件监听 事件监听实现流程 事件对象: 继承自java.util.EventObject对象,由开发者自行定义实现. 事件源: 就是触发事件的源头,不同的事件源会触发不同的事 ...
- spring中的事件监听机制
Spring event listener 介绍 example 简单原理解释 自定义事件.监听和发布 事件 监听器 发布者 测试 更加一般的事件 @EventListener原理 介绍 exampl ...
- Spring容器的事件监听机制(简单明了的介绍)
文章目录 前言 事件 1. 定义事件 2. 定义监听器 3. 定义发布器 Spring容器的事件监听机制 1.事件的继承类图 监听器的继承类图 总结 前言 上一篇我们介绍了SpringFactorie ...
- java中事件监听_Java中的事件监听机制
鼠标事件监听机制的三个方面: 1.事件源对象: 事件源对象就是能够产生动作的对象.在Java语言中所有的容器组件和元素组件都是事件监听中的事件源对象.Java中根据事件的动作来区分不同的事件源对象,动 ...
- Java中事件监听机制
Java中事件监听机制 一.事件监听机制的定义 要想了解Java中的事件监听机制,首先就要去了解一下在Java中事件是怎样去定义的呢!在使用Java编写好一个界面后,我们就会对界面进行一些操作,比如, ...
最新文章
- sql移除数据中的换行符和回车符
- 存储虚拟化之带内设备与基于存储控制器的虚拟化
- Web前端知识技能大汇总
- Spark入门(十三)之分组求平均值
- Bdsyn百度手机助手是何物,它是怎样神不知鬼不觉地安装到你的电脑里的?
- 在ubuntu中为程序添加图标快捷键
- 0906周测题目一 循环题的答案
- 选一种比较熟悉的软件,点评它的优缺点,并描述此类软件的发展历史
- chrome charset使用_SourceMap-使用教程
- html弄多个按钮_html - 一个表单中的两个提交按钮
- zookeeper基本安装文档
- 【设计模式专题】Singleton
- 2020 泰迪杯 C 题
- 判断conime.exe是不是病毒!
- 使用python发送qq邮件
- eWebEditor编辑HTML,eWebEditor编辑器免费版
- python 自动化办公(一)word制作
- 【Unity2D】制作可以左右移动的平台
- BOSS直聘自动投简历聊天机器人的实现过程
- 文件服务器报错413,HTTP 错误 413.1 - Request Entity Too Large错误的解决方法
热门文章
- 使用mvn生成webapp失败,尚未找到原因
- LDAP(轻量目录存取协议)
- 软考经过 之 天助自助者
- c/C++计算int / int *数组的长度;sizeof(指针),sizeof(数组名)的区别
- 谷歌发布 Android 8.1 首个开发者预览版,优化内存效率
- centos改动sshport
- mac编译openresty报Undefined symbols for architecture x86_64
- (未完)httpd进程数查询,prefork模式修改apache最大连接数
- 转: java学习路线图
- 自主研发:3通道1GS/s FPGA+DSP板