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 相关文章推荐
学习JS面向对象成果 借国庆发布个最新作品与大家交流
Oct 03 Javascript
关于JavaScript命名空间的一些心得
Jun 07 Javascript
学习JavaScript设计模式(策略模式)
Nov 26 Javascript
Bootstrap菜单按钮及导航实例解析
Sep 09 Javascript
js前端实现多图图片上传预览的两个方法(推荐)
Nov 18 Javascript
基于JS实现9种不同的面包屑和分布式多步骤导航效果
Feb 21 Javascript
Vue.js在使用中的一些注意知识点
Apr 29 Javascript
jQuery表单验证之密码确认
May 22 jQuery
解决vue router组件状态刷新消失的问题
Aug 01 Javascript
vue升级之路之vue-router的使用教程
Aug 14 Javascript
JS页面获取 session 值,作用域和闭包学习笔记
Oct 16 Javascript
使用JavaScrip模拟实现仿京东搜索框功能
Oct 16 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
php面向对象全攻略 (十二) 抽象方法和抽象类
2009/09/30 PHP
php的crc32函数使用时需要注意的问题(不然就是坑)
2015/04/21 PHP
将PHP从5.3.28升级到5.3.29时Nginx出现502错误
2015/05/09 PHP
php微信公众号开发之秒杀
2018/10/20 PHP
Laravel框架模型的创建及模型对数据操作示例
2019/05/07 PHP
jquery鼠标停止移动事件
2013/12/21 Javascript
js取float型小数点后两位数的方法
2014/01/18 Javascript
table insertRow、deleteRow定义和用法总结
2014/05/14 Javascript
jQuery前端框架easyui使用Dialog时bug处理
2014/12/05 Javascript
jQuery实现为图片添加镜头放大效果的方法
2015/06/25 Javascript
你所未知的3种Node.js代码优化方式
2016/02/25 Javascript
html+javascript+bootstrap实现层级多选框全层全选和多选功能
2017/03/09 Javascript
详解使用Vue Router导航钩子与Vuex来实现后退状态保存
2017/09/11 Javascript
浅谈AngularJS中使用$resource(已更新)
2017/09/14 Javascript
浅谈Angular4中常用管道
2017/09/27 Javascript
Vue 中 template 有且只能一个 root的原因解析(源码分析)
2020/04/11 Javascript
Webpack的Loader和Plugin的区别
2020/11/09 Javascript
linux系统使用python监控apache服务器进程脚本分享
2014/01/15 Python
Python实现简单多线程任务队列
2016/02/27 Python
说一说Python logging
2016/04/15 Python
Python 串口读写的实现方法
2019/06/12 Python
Django中信号signals的简单使用方法
2019/07/04 Python
python对execl 处理操作代码
2020/06/22 Python
Python txt文件如何转换成字典
2020/11/03 Python
Python3中FuzzyWuzzy库实例用法
2020/11/18 Python
一个不错的HTML5 Canvas多层点击事件监听实例
2014/04/29 HTML / CSS
美国彩妆品牌:Coastal Scents
2017/04/01 全球购物
物流管理专业大学生自荐信
2013/10/04 职场文书
个人职业生涯规划书1500字
2013/12/31 职场文书
军训鉴定表自我鉴定
2014/02/13 职场文书
财产保全担保书范文
2014/04/01 职场文书
党员三严三实对照检查材料
2014/10/13 职场文书
2014年平安创建工作总结
2014/11/24 职场文书
服务行业标语口号
2015/12/26 职场文书
2016党性教育学习心得体会
2016/01/21 职场文书
应届生们该怎么书写求职信?
2019/07/05 职场文书