热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

jQuery实现邮箱下拉列表自动补全功能

在一些网站我们经常看到当我们要输入邮箱的时候,还没有填写完,就会出现一系列下拉列表,帮助我们自动补全邮箱,怎么实现的呢?今天下面给大家分享基于jquery实现邮箱下拉列表自动补全功能,一起看看吧

记得,在上个项目中,遇到这样一个需求,网站要求填写邮箱的时候,还没有填写完,就会出现一系列下拉列表,帮助自动补全邮箱的功能。今天小编给给大家分享下我基于jquery是怎么实现此功能的!

功能简述

•填写邮箱名字,出现下拉列表,自动补全邮箱

•点击上下按键,选取下拉列表邮箱

•按回车键,选中列表内容,隐藏下拉列表

•鼠标经过,下拉列表选项设置为高亮

•鼠标点击,选中下拉列表选项,隐藏下拉列表

HTML

HTML代码很简单,我们就一个简单的输入框,然后一个ul标签,在内部可以放好多li标签。









    以上便是HTML代码

    CSS

    在CSS中,定义也比较简单,其中有一个 lilight 的 class,可以使背景变色,通过 remove 和 add 这个 class,我们可以轻松地实现下拉列表元素是否选中的区分。

    CSS所有样式如下

    .content input{
    padding:5px 10px;
    width:200px;
    }
    ul.list{
    list-style:none;
    padding:0px;
    margin:0px;
    overflow:hidden;
    }
    ul.list li{
    border:1px solid #EEE;
    width:180px;
    padding:5px 10px;
    margin:0px;
    text-overflow:ellipsis; //溢出时变为省略
    overflow:hidden;
    }
    .lilight{
    background-color:#fafafa;
    }

    JS

    我们引入 jQuery 来实现对元素的操作,实现了按键和鼠标监听,代码如下

    $(function(){
    //声明所有的电子邮件变量
    var mail=new Array("sina.com.cn","126.com","163.com","gmail.com","qq.com","vip.qq.com","hotmail.com","sohu.com","139.com","vip.sina.com","cuiqingcai.com");
    //生成一个个li,并加入到ul中
    for(var i=0;i@"+mail[i]+"");
    liElement.appendTo("ul.list");
    }
    //首先让list隐藏起来
    $("ul.list").hide();
    $("#email").keyup(function(event){
    //键入的内容不是上下箭头和回车
    if(event.keyCode!=38&&event.keyCode!=40&&event.keyCode!=13){
    //如果输入的值不是空或者不以空格开头
    if($.trim($(this).val())!=""&& $.trim($(this).val()).match(/^@/)==null){
    $("ul.list").show();
    //如果当前有已经高亮的下拉选项卡,那么将其移除
    if($("ul.list li:visible").hasClass("lilight")){
    $("ul.list li").removeClass("lilight");
    }
    //如果还存在下拉选项卡,那么将其高亮
    if($("ul.list li:visible")){
    $("ul.list li:visible:eq(0)").addClass("lilight");
    }
    }else{
    //否则不进行显示
    $("ul.list").hide();
    $("ul.list li").removeClass("lilight");
    }
    //输入的内容还没有包括@符号
    if($.trim($(this).val()).match(/.*@/)==null){
    $(".list li .ex").text($(this).val());
    }else{
    //输入的符号已经包含了@
    var str = $(this).val();
    var strs = str.split("@");
    $(".list li .ex").text(strs[0]);
    if($(this).val().length>=strs[0].length+1){
    tail=str.substr(strs[0].length+1);
    $(".list li .tail").each(function(){
    //如果数组中的元素是以文本中的后缀开头,那么就显示,否则不显示
    if(!($(this).text().match(tail)!=null&&$(this).text().indexOf(tail)==0)){
    //隐藏其他的li
    $(this).parent().hide();
    }else{
    //显示所在的li
    $(this).parent().show();
    }
    });
    }
    }
    }
    //按了回车时,将当前选中的元素写入到文本框中
    if(event.keyCode==13){
    $("#email").val($("ul.list li.lilight:visible").text());
    $("ul.list").hide();
    }
    });
    //监听上下方向键
    $("#email").keydown(function(event){
    //下方向键按下了
    if(event.keyCode==40){
    if($("ul.list li").is(".lilight")){
    if($("ul.list li.lilight").nextAll().is("li:visible")){
    $("ul.list li.lilight").removeClass("lilight").next("li").addClass("lilight");
    }
    }
    }
    //下方向键按下了
    if(event.keyCode==38){
    if($("ul.list li").is(".lilight")){
    if($("ul.list li.lilight").prevAll().is("li:visible")){
    $("ul.list li.lilight").removeClass("lilight").prev("li").addClass("lilight");
    }
    }
    }
    });
    //当鼠标点击某个下拉项时,选中该项,下拉列表隐藏
    $("ul.list li").click(function(){
    $("#email").val($(this).text());
    $("ul.list").hide();
    });
    //当鼠标划过某个下拉项时,选中该项,下拉列表隐藏
    $("ul.list li").hover(function(){
    $("ul.list li").removeClass("lilight");
    $(this).addClass("lilight");
    });
    //当鼠标点击其他位置,下拉列表隐藏
    $(document).click(function(){
    $("ul.list").hide();
    }); 
    }); 

    总结

    其实还有一个比较强大的插件,叫autocomplete,同样可以实现下拉列表的自动补全,功能更加完善,如果大家有兴趣可以去试一下。不过感觉最常用的就是邮箱自动补齐,而且直接用 jQuery 就可以比较方便地实现,所以博主就没有使用autocomplete插件,而是自己写了一下,一来练习一下,二来对这种功能的实现了解得更加透彻。

    以上所述是小编给大家介绍的jQuery实现邮箱下拉列表自动补全功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


    推荐阅读
    • Java实战之电影在线观看系统的实现
      本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
    • CSS3选择器的使用方法详解,提高Web开发效率和精准度
      本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
    • Voicewo在线语音识别转换jQuery插件的特点和示例
      本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
    • 本文介绍了解决IE678伪类不兼容问题的方法,包括少用CSS3和HTML5独有的属性,使用CSS hacker,使用last-child清除浮动、批量添加标签、去掉list item最后一个的border-right等技巧。同时还介绍了使用after清除浮动时加上IE独有属性zoom:1的处理方法。另外,本文还提到可以使用jQuery代替批量添加标签的功能,以及使用负边距和CSS2选择器element+element去掉list item最后一个的border-right的方法。 ... [详细]
    • Html5-Canvas实现简易的抽奖转盘效果
      本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
    • Ihavethefollowingonhtml我在html上有以下内容<html><head><scriptsrc..3003_Tes ... [详细]
    • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
    • HTML5网页模板怎么加百度统计?
      本文介绍了如何在HTML5网页模板中加入百度统计,并对模板文件、css样式表、js插件库等内容进行了说明。同时还解答了关于HTML5网页模板的使用方法、表单提交、域名和空间的问题,并介绍了如何使用Visual Studio 2010创建HTML5模板。此外,还提到了使用Jquery编写美好的HTML5前端框架模板的方法,以及制作企业HTML5网站模板和支持HTML5的CMS。 ... [详细]
    • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
      本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
    • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
    • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
    • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
    • 知识图谱——机器大脑中的知识库
      本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
    • 本文讲述了作者通过点火测试男友的性格和承受能力,以考验婚姻问题。作者故意不安慰男友并再次点火,观察他的反应。这个行为是善意的玩人,旨在了解男友的性格和避免婚姻问题。 ... [详细]
    • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
    author-avatar
    湘颖宛光秀雅
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有