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的日期选择控件
Oct 27 Javascript
Javascript学习笔记 delete运算符
Sep 13 Javascript
javascript实现跳转菜单的具体方法
Jul 05 Javascript
原生js事件的添加和删除的封装
Jul 01 Javascript
Ext4.2的Ext.grid.plugin.RowExpander无法触发事件解决办法
Aug 15 Javascript
JavaScript获取网页表单提交方式的方法
Apr 02 Javascript
JQuery创建DOM节点的方法
Jun 11 Javascript
JS正则表达式比较常见用法
Jan 26 Javascript
微信小程序 实例应用(记账)详解
Sep 28 Javascript
用Object.prototype.toString.call(obj)检测对象类型原因分析
Oct 11 Javascript
VUE安装使用教程详解
Jun 03 Javascript
微信小程序实现上传多张图片、删除图片
Jul 29 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实现与ASP Banner组件相似的类
2006/10/09 PHP
php中get_headers函数的作用及用法的详细介绍
2013/04/27 PHP
php通过Chianz.com获取IP地址与地区的方法
2015/01/14 PHP
基于PHP给大家讲解防刷票的一些技巧
2015/11/18 PHP
Python中使用django form表单验证的方法
2017/01/16 PHP
JS时间选择器 兼容IE6,7,8,9
2012/06/26 Javascript
jquery中插件实现自动添加用户的具体代码
2013/11/15 Javascript
javascript中的self和this用法小结
2014/02/08 Javascript
js清理Word格式示例代码
2014/02/13 Javascript
将字符串中由空格隔开的每个单词首字母大写
2014/04/06 Javascript
JS 弹出层 定位至屏幕居中示例
2014/05/21 Javascript
jQuery获取对象简单实现方法小结
2014/10/30 Javascript
浅谈JavaScript的事件
2015/02/27 Javascript
javascript Promise简单学习使用方法小结
2016/05/17 Javascript
JS获取一个未知DIV高度的方法
2016/08/09 Javascript
Node.js数据库操作之连接MySQL数据库(一)
2017/03/04 Javascript
js实现下拉框效果(select)
2017/03/28 Javascript
vue.js动态数据绑定学习笔记
2017/05/19 Javascript
浅谈基于Vue.js的移动组件库cube-ui
2017/12/20 Javascript
JS扁平化输出数组的2种方法解析
2019/09/17 Javascript
纯JS开发baguetteBox.js响应式画廊插件
2020/06/28 Javascript
python多线程用法实例详解
2015/01/15 Python
Python中使用Queue和Condition进行线程同步的方法
2016/01/19 Python
Python中字符串格式化str.format的详细介绍
2017/02/17 Python
利用Python查看目录中的文件示例详解
2017/08/28 Python
Python使用回溯法子集树模板解决迷宫问题示例
2017/09/01 Python
使用Python对微信好友进行数据分析
2018/06/27 Python
Python实现图像的垂直投影示例
2020/01/17 Python
Django 后台带有字典的列表数据与页面js交互实例
2020/04/03 Python
css3 flex布局 justify-content:space-between 最后一行左对齐
2020/01/02 HTML / CSS
BrandAlley英国:法国折扣奢侈品网上零售商
2017/07/03 全球购物
应届生人事助理求职信
2013/11/09 职场文书
自我评价中英文语句
2013/11/30 职场文书
上班迟到检讨书
2015/05/06 职场文书
导游词之阳朔遇龙河
2019/12/16 职场文书
MySQL中IO问题的深入分析与优化
2022/04/02 MySQL