热门标签 | 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实现邮箱下拉列表自动补全功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


    推荐阅读
    • 在使用 MUI 框架进行应用开发时,开发者常常会遇到 mui.init() 和 mui.plusReady() 这两个方法。本文将详细解释它们的区别及其在不同开发环境下的应用。 ... [详细]
    • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
    • 本文介绍了如何使用jQuery根据元素的类型(如复选框)和标签名(如段落)来获取DOM对象。这有助于更高效地操作网页中的特定元素。 ... [详细]
    • 导航栏样式练习:项目实例解析
      本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
    • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
    • 深入理解Tornado模板系统
      本文详细介绍了Tornado框架中模板系统的使用方法。Tornado自带的轻量级、高效且灵活的模板语言位于tornado.template模块,支持嵌入Python代码片段,帮助开发者快速构建动态网页。 ... [详细]
    • 深入理解Cookie与Session会话管理
      本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
    • 本文介绍如何在 Xcode 中使用快捷键和菜单命令对多行代码进行缩进,包括右缩进和左缩进的具体操作方法。 ... [详细]
    • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
    • 本文详细介绍了如何使用Python编写爬虫程序,从豆瓣电影Top250页面抓取电影信息。文章涵盖了从基础的网页请求到处理反爬虫机制,再到多页数据抓取的全过程,并提供了完整的代码示例。 ... [详细]
    • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
    • 本文介绍如何在应用程序中使用文本输入框创建密码输入框,并通过设置掩码来隐藏用户输入的内容。我们将详细解释代码实现,并提供专业的补充说明。 ... [详细]
    • 本文详细介绍了如何通过命令行启动MySQL服务,包括打开命令提示符窗口、进入MySQL的bin目录、输入正确的连接命令以及注意事项。文中还提供了更多相关命令的资源链接。 ... [详细]
    • 本文介绍如何使用 NSTimer 实现倒计时功能,详细讲解了初始化方法、参数配置以及具体实现步骤。通过示例代码展示如何创建和管理定时器,确保在指定时间间隔内执行特定任务。 ... [详细]
    • 本文介绍了在Windows环境下使用pydoc工具的方法,并详细解释了如何通过命令行和浏览器查看Python内置函数的文档。此外,还提供了关于raw_input和open函数的具体用法和功能说明。 ... [详细]
    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社区 版权所有