欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JS实现的邮箱提示补全效果示例

程序员文章站 2022-04-18 21:41:21
本文实例讲述了js实现的邮箱提示补全效果。分享给大家供大家参考,具体如下: 现在要实现的是类似网易登录时的邮箱提示框的效果,不过这里我打算稍微改变一下,就是在输入@的时候...

本文实例讲述了js实现的邮箱提示补全效果。分享给大家供大家参考,具体如下:

现在要实现的是类似网易登录时的邮箱提示框的效果,不过这里我打算稍微改变一下,就是在输入@的时候再出现邮箱提示列表

实现提示的原理是采用正则进行匹配

效果图如下:

JS实现的邮箱提示补全效果示例

代码如下:

<!doctype html>
<html>
<head>
  <meta charset="utf-8" />
  <title>邮箱补全提示</title>
  <style>
    ul{padding:0px;margin:0px;}
    .login_autocomplete{width:256px;border:1px solid #4190db;position:absolute;background-color:#ffffff;z-index:99;top:109px;left:40px;display:none}
    .login_auto_ul em{font-style:normal}
    .login_auto_ul li.login_auto_title{font-weight:normal;line-height:30px;}
    .login_auto_ul li{line-height:22px;text-indent:5px;font-family:"arial";cursor:pointer;font-weight:bold;color:#333}
    .login_auto_ul li.hover,.login_auto_ul li.curr{color:#ffffff;background-color:#6eb6fe}
  </style>
  <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
  <script>
    window.email_auto = function(selector){
      var elt = $(selector);
      var strhtml = '<div class="login_autocomplete" id="login_autocomplete">'+
            '    <ul class="login_auto_ul">'+
            '      <li class="login_auto_title">请选择邮箱后缀</li>'+
            '      <li class="hover" hz="@qq.com"></li>'+
            '      <li hz="@163.com"></li>'+
            '      <li hz="@126.com"></li>'+
            '      <li hz="@yahoo.com"></li>'+
            '      <li hz="@sina.com"></li>'+
            '      <li hz="@21cn.com"></li>'+
            '    </ul>'+
            '  </div>';
      var lc = "#login_autocomplete";
      var autocomplete,autoli;
      if($(lc).length==0){
        $("body").append(strhtml);
        $(lc).data("elt",elt);
        autocomplete = $("#login_autocomplete");
        autoli = autocomplete.find("li:not(.login_auto_title)");
        autoli.mouseover(function(){
          $(this).siblings().filter(".hover").removeclass("hover");
          $(this).addclass("hover");
        }).mouseout(function(){
          $(this).removeclass("hover");
        }).mousedown(function(){
          $(lc).data("elt").val($(this).text()).change();
          $(this).parent().parent().hide();
        });
      }else{
        $(lc).data("elt",elt);
        autocomplete = $("#login_autocomplete");
        autoli = autocomplete.find("li:not(.login_auto_title)");
      }
      $(lc).css("width",elt.outerwidth()-1);
      //用户名补全+翻动
      elt.keyup(function(e){
        if(/13|38|40|116/.test(e.keycode) || this.value==''){
          return false;
        }
        var username = this.value;
        if(username.indexof("@")==-1){
          autocomplete.hide();
          return false;
        }
        autoli.each(function(){
          this.innerhtml = username.replace(/\@+.*/,"")+$(this).attr("hz");
          if(this.innerhtml.indexof(username)>=0){
            $(this).show();
          }else{
            $(this).hide();
          }
        }).filter(".hover").removeclass("hover");
        autocomplete.show().css({
          left : $(this).offset().left,
          top : $(this).offset().top + $(this).outerheight(true) - 1
        });
        if(autoli.filter(":visible").length==0){
          autocomplete.hide();
        }else{
          autoli.filter(":visible").eq(0).addclass("hover");
        }
      }).change(function(){
        $("#login_autocomplete").hide();
      }).keydown(function(e){
        if(e.keycode==38){ //上
          autoli.filter(".hover").prev().not(".login_auto_title").addclass("hover").next().removeclass("hover");
        }else if(e.keycode==40){ //下
          autoli.filter(".hover").next().addclass("hover").prev().removeclass("hover");
        }else if(e.keycode==13){ //enter
          autoli.filter(".hover").mousedown();
        }
      }).focus(function(){
        $("#login_autocomplete").data("elt",$(this));
      });
    }
    $(function(){
      email_auto("#xxx");
    });
  </script>
</head>
<body>
测试:邮箱补全提示<br/>
<input type="text" id="xxx" style="width:300px"/>
</body>
</html>

ps:这里再为大家提供2款非常方便的正则表达式工具供大家参考使用:

javascript正则表达式在线测试工具:

正则表达式在线生成工具:

更多关于javascript相关内容感兴趣的读者可查看本站专题:《javascript正则表达式技巧大全》、《javascript替换操作技巧总结》、《javascript查找算法技巧总结》、《javascript数据结构与算法技巧总结》、《javascript遍历算法与技巧总结》、《javascript中json操作技巧总结》、《javascript错误与调试技巧总结》及《javascript数学运算用法总结

希望本文所述对大家javascript程序设计有所帮助。