jquery实现邮箱自动补全功能示例分享


Posted in Javascript onFebruary 17, 2014
(function($){
    $.fn.autoMail = function(options){ 
        var autoMail = $(this); 
        var _value   = ''; 
        var _index   = -1; 
        var _width   = autoMail.outerWidth(); 
        var _height  = autoMail.outerHeight(); 
        var _left    = autoMail.offset().left; 
        var _top     = autoMail.offset().top; 
        autoMail.defaults = { 
            deValue : '请输入邮箱地址', 
            textCls : 'text-gray', 
            listCls : 'list-mail', 
            listTop : 1, 
            mailArr  : ["qq.com","gmail.com","126.com","163.com","hotmail.com","yahoo.com","yahoo.com.cn","live.com","sohu.com","sina.com"] 
        } 
        //初始化 
        autoMail.init = function(){ 
            autoMail.vars = $.extend({},autoMail.defaults,options); 
            autoMail.val(autoMail.vars.deValue).addClass(autoMail.vars.textCls); 
            autoMail.click(function(event){ 
                autoMail.select().removeClass(autoMail.vars.textCls); 
                if(autoMail.val() != autoMail.vars.deValue){ 
                    autoMail.add(); 
                    autoMail.order(_value); 
                    autoMail.list.find('.item').each(function(){ 
                        if($(this).text() == autoMail.val()){ 
                            $(this).siblings('.item').removeClass('select'); 
                            $(this).addClass('select'); 
                            return false; 
                        } 
                    }) 
                } 
                event.stopPropagation(); 
            }) 
            autoMail.blur(function(event){ 
                if(autoMail.val() == '' || autoMail.val() == autoMail.vars.deValue){ 
                    alert(autoMail.val()) 
                    autoMail.val(autoMail.vars.deValue).addClass(autoMail.vars.textCls); 
                } 
            }) 
            //文本域键盘松开事件 
            autoMail.keyup(function(event){ 
                if($(autoMail.list).length == 0){ 
                    autoMail.add(); 
                } 
                if(autoMail.list.length > 0){ 
                    var keyCode = event.keyCode; 
                    //alert(keyCode) 
                    switch(keyCode){ 
                        case 13: 
                            autoMail.remove(); 
                            autoMail.blur(); 
                            break; 
                        case 38: 
                            _index--; 
                            if(_index < 0){ 
                                _index = 0; 
                            } 
                            autoMail.keyOperate(_index); 
                            break; 
                        case 40: 
                            _index++; 
                            if(_index > $('.item',autoMail.list).length - 1){ 
                                _index = ('.item',autoMail.list).length - 1 
                            } 
                            autoMail.keyOperate(_index); 
                            break; 
                        default: 
                            if(autoMail.val().indexOf('@') < 0){ 
                                _value = autoMail.val(); 
                                autoMail.order(_value);      
                            }     
                    }   
                } 
            }) 
            $(document).click(function(){ 
                if($(autoMail.list).length > 0){ 
                    autoMail.remove(); 
                    autoMail.blur(); 
                } 
            }) 
        } 
        //创建列表 
        autoMail.create = function(){ 
            var li = ''; 
            for(var i = 0; i < autoMail.vars.mailArr.length; i++){ 
                li += '<li class="item">'+ '<span class="style">' + '@' + autoMail.vars.mailArr[i] + '</span>' + '</li>'; 
            } 
            autoMail.list = $('<div class="'+ autoMail.vars.listCls +'"><ul>'+ li +'</ul></div>'); 
            autoMail.list.css({ 
                'position' : 'absolute', 
                'left'     : _left, 
                'top'      : _top + _height + autoMail.vars.listTop, 
                'min-width': _width 
            }) 
            autoMail.list.appendTo($('body')); 
            //邮箱列表绑定事件 
            autoMail.list.find('.item').click(function(event){ 
                autoMail.getVal($(this)); 
                autoMail.remove(); 
                event.stopPropagation(); 
            }) 
            autoMail.list.find('.item').hover( 
                function(){ $(this).addClass('hover'); }, 
                function(){ $(this).removeClass('hover'); } 
            ) 
            return autoMail.list; 
        } 
        //序列化列表 
        autoMail.order = function(_value){ 
            $('.name',autoMail.list).remove(); 
            var name = $('<span class="name">'+ _value +'</span>'); 
            $('.item',autoMail.list).prepend(name); 
        } 
        //添加列表 
        autoMail.add = function(){ 
            if(typeof autoMail.list == 'undefined' || autoMail.list.length < 1) autoMail.create(); 
        } 
        //移除列表 
        autoMail.remove = function(){ 
            if(autoMail.list.length > 0){ 
                autoMail.list.remove(); 
                delete autoMail.list; 
            } 
        } 
        //获取值 
        autoMail.getVal = function(obj){ 
            if($('.name',obj).text() != ''){ 
                var selectValue = obj.text(); 
                autoMail.val(selectValue);   
            }else{ 
                return false; 
            } 
        } 
        //键盘操作 
        autoMail.keyOperate = function(_index){ 
            $('.item',autoMail.list).eq(_index).addClass('hover').siblings('.item').removeClass('hover'); 
            autoMail.val($('.item',autoMail.list).eq(_index).text()); 
        } 
        //开始初始话动作... 
        autoMail.init(); 
    } 
})(jQuery)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>无标题文档</title>
        <script type="text/javascript" src="./jquery.js"></script>
        <script type="text/javascript" src="./autoMail.js"></script>
        <script type="text/javascript">
        $(function(){
            $('.automail').autoMail();
        })  
        </script>
        <style type="text/css">
        *{padding: 0; margin: 0;}
        body{font-family: "微软雅黑"; color: #333; font-size: 12px;}
        ul{list-style: none;}
        input{ width: 180px; height: 16px; line-height: 16px; margin: 100px; padding: 4px; border: 1px solid #aaa; font-size: 12px; font-family: "微软雅黑"; }
        .list-mail ul{ border: 1px solid #aaa; line-heihgt: 24px; padding: 6px; }
        .list-mail li{ cursor: pointer; padding: 2px 3px; margin-bottom: 2px; }
        .list-mail .name{ color: #982114; }
        .list-mail .hover{ background: #fefacf; }
        .list-mail .select{ background: #dedaae; }
        </style>
    </head>
    <body>
        <div class="test"></div>
        <input type="text" class="automail" />
    </body>
</html>
Javascript 相关文章推荐
jquery随机展示头像代码
Dec 21 Javascript
JavaScript极简入门教程(一):基础篇
Oct 25 Javascript
js获取图片宽高的方法
Nov 25 Javascript
详解AngularJS实现表单验证
Dec 10 Javascript
Jquery Easyui搜索框组件SearchBox使用详解(19)
Dec 17 Javascript
javascript显示系统当前时间代码
Dec 29 Javascript
Vue常见面试题整理【值得收藏】
Sep 20 Javascript
Vue基于vuex、axios拦截器实现loading效果及axios的安装配置
Apr 26 Javascript
Vue项目实现换肤功能的一种方案分析
Aug 28 Javascript
ES6中let、const的区别及变量的解构赋值操作方法实例分析
Oct 15 Javascript
vue.js路由mode配置之去掉url上默认的#方法
Nov 01 Javascript
Node.js fs模块原理及常见用途
Oct 22 Javascript
JQuery与JS里submit()的区别示例介绍
Feb 17 #Javascript
按Enter键触发事件的jquery方法实现代码
Feb 17 #Javascript
清除div下面的所有标签的方法
Feb 17 #Javascript
JS控制一个DIV层在指定时间内消失的方法
Feb 17 #Javascript
js打开新窗口方法整理
Feb 17 #Javascript
Javascript浮点数乘积运算出现多位小数的解决方法
Feb 17 #Javascript
eclipse导入jquery包后报错的解决方法
Feb 17 #Javascript
You might like
我常用的几个类
2006/10/09 PHP
php使用APC实现实时上传进度条功能
2015/10/26 PHP
WordPress中查询文章的循环Loop结构及用法分析
2015/12/17 PHP
PHP基于递归实现的约瑟夫环算法示例
2017/08/27 PHP
PHP小程序支付功能完整版【基于thinkPHP】
2019/03/26 PHP
防止浏览器记住用户名及密码的简单实用方法
2013/04/22 Javascript
动态载入js提高网页打开速度的方法
2014/07/04 Javascript
JavaScript实现twitter puddles算法实例
2014/12/06 Javascript
jQuery中[attribute]选择器用法实例
2014/12/31 Javascript
全面了解函数声明与函数表达式、变量提升
2016/08/09 Javascript
AngularJS+Bootstrap实现多文件上传与管理
2016/11/08 Javascript
smartupload实现文件上传时获取表单数据(推荐)
2016/12/12 Javascript
原生JS下拉加载插件分享
2016/12/26 Javascript
详解jQuery事件
2017/01/13 Javascript
nodeJs链接Mysql做增删改查的简单操作
2017/02/04 NodeJs
微信小程序组件之srcoll-view的详解
2017/10/19 Javascript
轻松理解vue的双向数据绑定问题
2017/10/30 Javascript
使用 Vue cli 3.0 构建自定义组件库的方法
2019/04/30 Javascript
bootstrap Table实现合并相同行
2019/07/19 Javascript
vue下使用nginx刷新页面404的问题解决
2019/08/02 Javascript
uniapp开发小程序实现滑动页面控制元素的显示和隐藏效果
2020/12/10 Javascript
[01:02:48]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 LGD vs OG
2018/04/02 DOTA
python模块restful使用方法实例
2013/12/10 Python
利用python实现简单的邮件发送客户端示例
2017/12/23 Python
python如何在列表、字典中筛选数据
2018/03/19 Python
python爬虫框架scrapy实现模拟登录操作示例
2018/08/02 Python
Python3查找列表中重复元素的个数的3种方法详解
2020/02/13 Python
在Keras中实现保存和加载权重及模型结构
2020/06/15 Python
PyQt5的QWebEngineView使用示例
2020/10/20 Python
css3的transform中scale缩放详解
2014/12/08 HTML / CSS
2014-2015学年工作总结
2014/11/27 职场文书
2015年上半年党建工作总结
2015/03/30 职场文书
2019财务毕业实习报告
2019/06/27 职场文书
世界文化遗产导游词
2019/08/07 职场文书
古诗文之爱国名句(77句)
2019/09/24 职场文书
《金肉人》米特&《航海王》阿鹤声优松岛实因胰脏癌去世 享寿81岁
2022/04/13 日漫