仿新浪微博登录的邮箱地址自动补全功能

简介:

首先,来看一下登录新浪微博的效果图:

当你开始输入你的电子邮箱前的帐号时,就会出现常用邮箱的列表,并自动补齐。

实现的时候,首先在页面上放一个输入文本框和一个div。将div隐藏:

电子邮件:<input id="email" name="email" type="text" autocomplete="off" /> <div id="auto-show"> </div>

样式定义如下:

<mce:style type="text/css"><!-- #email { width: 150px; } .autoDiv { visibility: hidden; position: absolute; width: 150px; height: 150px; border: 1px solid #00f; background-color: White; } --></mce:style><style type="text/css" mce_bogus="1"> #email { width: 150px; } .autoDiv { visibility: hidden; position: absolute; width: 150px; height: 150px; border: 1px solid #00f; background-color: White; } </style>

先预览一下,主要的几个js函数:

详细代码:

//自动显示 function autoShow() { var obj = document.getElementById("email"); var mailAddressList = document.getElementById("auto-show"); var x = 0, y = 0, o = obj; h = obj.offsetHeight; while (o != null) { x += o.offsetLeft; y += o.offsetTop; o = o.offsetParent; } mailAddressList.style.left = x + 'px'; mailAddressList.style.top = y + h + 'px'; mailAddressList.style.visibility = "visible"; } //自动隐藏 function autoHide() { var mailAddressList = document.getElementById("auto-show"); mailAddressList.style.visibility = "hidden"; } //给文本框设置值 function setValue(newIndex, emailInput) { var addr = $("div #" + newIndex).text().replace(/^/s/s*/, '').replace(//s/s*$/, ''); emailInput.val(""); emailInput.val(addr); } //鼠标移入设置样式 function setStyle(obj) { oldIndex = newIndex; newIndex = $(obj).attr("id"); $(obj).css("background-color", "red"); $("div #" + oldIndex).css("background-color", "white"); setValue(newIndex, $("#email")); } //鼠标移出取消样式 function cancelStyle(obj) { $(obj).css("background-color", "white"); } //按上下键设置样式 function setStyleForChange() { //handle newIndex newIndex = newIndex > counts ? 1 : newIndex; newIndex = newIndex < 1 ? counts : newIndex; $("div #" + newIndex).css("background-color", "red"); $("div #" + oldIndex).css("background-color", "white"); }

定义变量:

//define args //常用邮件列表数组 var emailList = ["@163.com", "@126.com", "@gmail.com", "@yahoo.com", "@yahoo.com.cn", "@sina.cn", "@qq.com", "@hotmail.com","@sohu.com","@189.cn"]; //新项的索引(用于设置高亮显示的样式) var newIndex = 0; //旧项的索引(用于取消原有高亮显示的样式) var oldIndex = 0; //邮件列表个数 var counts = emailList.length;

下面,主要代码概况:

代码:

$(document).ready(function () { var emailInput = $("#email"); var emailListDiv = $("#auto-show"); //bind focus event(获得焦点) emailInput.focus(autoShow); //bind blur event(失去焦点) emailInput.blur(autoHide); emailListDiv.addClass("autoDiv"); //bind the events:mouseover、mouseout for the div for (var i = 0; i < emailList.length; i++) { $("#auto-show").append("<div id='" + (i + 1).toString() + "' onmouseover='setStyle(this)' onmouseout='cancelStyle(this)' >" + emailList[i] + "</div>"); } //handle key's events.(键盘弹出事件处理) emailInput.keyup(function (event) { var myEvent = event || window.event; var keyCode = myEvent.keyCode; //获得键值 //press down key(向下键) if (keyCode == 40) { oldIndex = newIndex; newIndex++; setStyleForChange(); //set value for input setValue(newIndex, emailInput); } //press up key(向上键) if (keyCode == 38) { oldIndex = newIndex; newIndex--; setStyleForChange(); //set value for input setValue(newIndex, emailInput); } //press enter key(回车键) if (keyCode == 13) { //set value for input setValue(newIndex, emailInput); //set div hidden autoHide(); } //press esc key(ESC键) if (keyCode == 27) { autoHide(); } //press a-z|A-Z|0-9 //8对应退格键,46对应删除键 var changedText = (keyCode >= 65 && keyCode <= 90) || (keyCode >= 97 && keyCode <= 122) || (keyCode >= 48 && keyCode <= 56); if (changedText) { var currentVal = emailInput.val().replace(/^/s/s*/, '').replace(//s/s*$/, ''); //如果原来已包含有@字符 if (currentVal.indexOf("@") > -1) { emailInput.val(""); for (var i = 1; i <= 6; i++) { $("div #" + i).text("").text(emailList[i - 1]); } return; } for (var i = 1; i <= 6; i++) { $("div #" + i).text("").text(currentVal + emailList[i - 1]); } } //如果按下退格键或删除键 if (keyCode == 8 || keyCode == 46) { emailInput.val(""); for (var i = 1; i <= 6; i++) { $("div #" + i).text("").text(emailList[i - 1]); } } }); });

代码中已有注释,实现不是很复杂,细节处理比较多点。

效果图如下:




原文发布时间为:2011-05-07


本文作者:vinoYang


本文来自云栖社区合作伙伴CSDN博客,了解相关信息可以关注CSDN博客。

目录
相关文章
|
小程序 数据安全/隐私保护 开发者
【已解决】开发者扫码登录提示“需要验证小程序密码”
开发者扫码登录提示“需要验证小程序密码”
473 0
【已解决】开发者扫码登录提示“需要验证小程序密码”
|
10月前
|
存储 开发工具 数据安全/隐私保护
使用 Sourcetree 提示需要输入密码 #62
使用 Sourcetree 提示需要输入密码 #62
129 0
|
11月前
点击回车,完成登录功能
点击回车,完成登录功能
|
数据安全/隐私保护 Python
Python实现账号登陆系统的编辑
Python实现账号登陆系统的编辑
68 0
|
开发工具 数据安全/隐私保护 git
Valine自定义邮件回复提示
Valine自定义邮件回复提示
87 0
|
数据安全/隐私保护 Android开发 容器
autojs之密码专用输入框
使用场景 密码输入框
843 0
|
网络安全 开发工具 数据安全/隐私保护
SourceTree 一直提示输入密码问题
问题: 不管输入哪个密码都是一直循环提示需要输入密码,并且也确认在github上添加过ssh key。 解决办法: 先在命令行git clone一次之后,再重新使用SourceTree进行克隆就没有问题了,后面就可以随意使用SourceTree进行克隆其他项目。 不止github.com,code.aliyun.com也可能出现该问题,同样的解决办法处理即
918 0
|
数据安全/隐私保护
制作登录页面,点击键盘的 Enter 键或者单击“登录”按钮,验证用户输入的邮箱和密码是否正确
制作登录页面,点击键盘的 Enter 键或者单击“登录”按钮,验证用户输入的邮箱和密码是否正确
284 0
制作登录页面,点击键盘的 Enter 键或者单击“登录”按钮,验证用户输入的邮箱和密码是否正确
|
JavaScript 数据安全/隐私保护
点击忘记密码,显示重置密码的方式(五)
当点击忘记密码时,会在下面弹出一个可以找回密码的方式面板。比在下面直接扔出一个,通过手机号找回,通过邮箱找回,联系管理员找回强太多了。
256 0
点击忘记密码,显示重置密码的方式(五)
|
数据安全/隐私保护
通过VBS编写自动输入账号和密码、自动登录程序的脚本
通过VBS编写自动输入账号和密码、自动登录的脚本。 请查看附件: 附件中是以QQ为例。 这个脚本的好处是: 1、可以用于开机自动登录 2、可以用于运维人员自动登录一些程序 3、可以用于......
3298 0