jQuery邮箱自动补全代码

JScript 代码   复制

(function($){
    $.fn.emailMatch= function(settings){
        var defaultSettings = {
            emailTip:"请输入邮箱地址",
            aEmail: ["163.com", "qq.com", "gmail.com", "126.com", "hotmail.com", "yahoo.com", "yahoo.com.cn", "live.com", "sohu.com", "sina.com"], //邮件数组
            wrapLayer:"body",
            className:"mailListBox",
            emailRemember:true,
            autoCursor:false,
            position:"bottom" // bottom, left , right
        };
        /* 合并默认参数和用户自定义参数 */
        settings = settings ? $.extend(defaultSettings,settings):defaultSettings;
        return this.each(function(){
            var elem = $(this),t=0,l=0,
            w = elem.outerWidth(),
            h = elem.outerHeight(),
            selectVal = sMail = inputVal = "",arrayNum = 0,
            isIndex = -1;

            t = elem.position().top;
            l = elem.position().left;

            var mailWrap = document.createElement("div");
            $(mailWrap).attr({"id":elem.attr("id"),"class":settings.className})
            $(settings.wrapLayer).append(mailWrap);
            if($.trim(elem.val()) == ""){elem.val(settings.emailTip);};
            elem.focus(function(){
                arrayNum = 0;
                if($.trim(elem.val()) == settings.emailTip){elem.val(‘‘);}; // 清空 输入框 提示内容
                if($.trim(elem.val()) !=""){
                    inputVal = $.trim(elem.val());
                    isIndex = inputVal.indexOf("@");
                    if(isIndex >= 0 ){
                        sMail = inputVal.substr(isIndex + 1);
                        inputVal = inputVal.substring(0,isIndex);
                        if(sMail !=""){
                            arrayNum = parseInt(!position(settings.aEmail,sMail)?0:position(settings.aEmail,sMail));
                        }
                    }
                    if(settings.autoCursor){
                        elem.val(inputVal);
                        if($.browser.msie ){
                            setCaretAtEnd(elem.attr("id"));
                        }
                    }
                    showList($(mailWrap),w,h,t,l);
                    createMailList(mailWrap,inputVal,sMail,settings.aEmail,arrayNum);
                };
            }).blur(function(){
                if(elem.val() == ‘‘){
                    elem.val(settings.emailTip);
                    hideList($(mailWrap));
                    return false;
                }; // 还原 输入框 提示内容
                enterVal(mailWrap,elem);
                hideList($(mailWrap));
            });
            elem.keyup(function(e){
                var suffixArray = [], eKey = e && (e.which || e.keyCode);
                //console.log(eKey);
                switch(eKey){
                    case 9: // tab 按键
                        return;
                        break;
                    case 13: { // 回车
                            enterVal(mailWrap,elem);
                            hideList($(mailWrap));
                    }break;
                    case 38:{ // 方向键 上
                        showList($(mailWrap),w,h,t,l);
                        cursorMove(mailWrap,-1);
                    }break;
                    case 40: {// 方向键 下
                        showList($(mailWrap),w,h,t,l);
                        cursorMove(mailWrap,+1);
                    }break;
                    default:{
                            inputVal = $.trim(elem.val());
                        var    keyIndex = inputVal.indexOf("@");
                        var suffix = "",suffixState = true;
                        if(keyIndex >= 0){
                            suffix = inputVal.substr(keyIndex + 1);
                            inputVal = inputVal.substring(0,keyIndex);
                            $("#t2").text("BBB" + inputVal);
                            if(suffix != ‘‘ && settings.emailRemember){ // 过滤数组
                                for (var i = 0; i < settings.aEmail.length; i++) {
                                    if (settings.aEmail[i].indexOf(suffix) == 0) {
                                        suffixArray.push(settings.aEmail[i]);
                                        suffixState = false;
                                    }
                                }
                            }
                            if(suffix != ‘‘ && !settings.emailRemember){ // 当前高亮 选项
                                for (var i = 0; i < settings.aEmail.length; i++) {
                                    if (settings.aEmail[i].indexOf(suffix) == 0) {
                                        arrayNum = i;
                                        suffixState = false;
                                        break;
                                    }
                                }
                            }
                        }

                        suffixArray = suffixArray.length > 0 ? suffixArray:settings.aEmail;
                        if(inputVal=="" && suffix == ""){
                            hideList($(mailWrap));
                            arrayNum = 0;
                            createMailList(mailWrap,inputVal,suffix,settings.aEmail,arrayNum);
                        }else{
                            showList($(mailWrap),w,h,t,l);
                            createMailList(mailWrap,inputVal,suffix,suffixArray,arrayNum);
                        }
                    }
                }

            });

            $(mailWrap).find("li:not(‘.first‘)").live(‘mouseover‘,function(){
                $(this).addClass("hover").siblings().removeClass("hover");
            });
            $(mailWrap).find("li:not(‘.first‘)").live(‘mousedown‘,function(){
                $(this).addClass("current").siblings().removeClass("current");
                enterVal(mailWrap,elem);
                hideList($(mailWrap));
            });
            $(mailWrap).bind("mouseout",function(){
                $(mailWrap).find("li:not(‘.first‘)").removeClass("hover");
            });
        });
    };

    function cursorMove(o,n){
        var cursorList = $(o).find("li:not(‘.first‘)"),k = new Number();
        for(i=0;i<cursorList.length;i++){
            if(cursorList[i].className == "current"){
                k = i+n
                cursorList[i].className = "";
            };
        }
        if(k < 0) k =0;
        if(k >= cursorList.length - 1 ) k = cursorList.length - 1;
        cursorList[k].className = "current";
    }

    function setCaretAtEnd(field){ // IE 系列浏览器 在自动光标跳回文档首问题
        var b = document.getElementById(field);
        if (b.createTextRange){
            var r = b.createTextRange();
            r.moveStart(‘character‘,  b.value.length);
            r.collapse();
            r.select();
        }
    }

    function position(array,value){  // 取得 元素在数组中的位置
        for(var i in array){
            if(array[i]==value){
                return i;break;
            }
        }
    };
    function enterVal(oWrap,elem){
        elem.val($(oWrap).find("li.current").text()); // 获取高亮内容 到 输入框
    };

    function showList(oElem,w,h,t,l){ // 显示 邮箱框架 并定位.
        oElem.css({"display":"block","top":h + t,"left":l,"width":w-2});
    };

    function hideList(oElem){ // 显示 邮箱框架
        oElem.css({"display":"none"});
    };

    function createMailList(oWrap,sVal,suffix,aEail,nK){ // 创建 候选列表
        if(nK < 0 ) {nK = 0;}
        if(nK > aEail.length-1) {nK = aEail.length - 1;}
        var mailList = "<li class=‘first‘><span>请选择邮箱类型</span></li>";
        var State = true; // 用户键入 后缀 是否匹配候选后缀 的状态

        for(k=0; k<aEail.length;k++){
            if(suffix!= ‘‘ && aEail[k].indexOf(suffix) == 0){
                State = false;
            }
        }

        nK = parseInt(suffix!= ‘‘ && State && !position(aEail,suffix)?0:nK);

        if(suffix !=‘‘ && State ){
            if(nK == 0){
                mailList += ‘<li class="current"><span>‘+sVal+‘</span>@‘+suffix+‘</li>‘;
            } else {
                mailList += ‘<li><span>‘+sVal+‘</span>@‘+suffix+‘</li>‘;
            }
        }
        if($.isArray(aEail)){
            $.each(aEail, function(i){
                if(State && suffix !=‘‘){
                    if(i == (nK-1) ){
                        mailList += ‘<li class="current"><span>‘+sVal+‘</span>@‘+aEail[i]+‘</li>‘;
                    } else {
                        mailList += ‘<li><span>‘+sVal+‘</span>@‘+aEail[i]+‘</li>‘;
                    }
                } else{
                    if(i == nK){
                        mailList += ‘<li class="current"><span>‘+sVal+‘</span>@‘+aEail[i]+‘</li>‘;
                    } else {
                        mailList += ‘<li><span>‘+sVal+‘</span>@‘+aEail[i]+‘</li>‘;
                    }
                }
            });
        }
        mailList = "<ul>" + mailList + "</ul>";
        $(oWrap).html(mailList);
    };
})(jQuery);

HTML 代码   复制

<div class="f_item">

     <label class="i_label">邮箱:</label>

     <input type="text" class="i_text" id="txtLoginID" name="txtLoginID" style="color: rgb(153, 153, 153);">

     <div id="txtLoginIDTip">

     </div>

</div>

<script>
   $("#txtLoginID").emailMatch();
</script>
 
时间: 2024-12-16 10:12:46

jQuery邮箱自动补全代码的相关文章

jquery邮箱自动补全

在使用前需要有如下文件: jquery-1.7.1.min.js jquery.mailAutoComplete-3.1.js 大家可以到网上下载: [jquery.mailAutoComplete-3.1.js]的请到这里下载:  http://download.csdn.net/detail/xiaolinzai888/7794939 [jquery-1.7.1.min.js]可以到jquery官网下载 页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHT

知问前端——邮箱自动补全

本节课,我们通过自动补全source属性的function回调函数,来动态的设置我们的数据源,以达到可以实现邮箱补全功能. 数据源function 自动补全UI的source不但可以是数组,也可以是function回调函数,提供了自带的两个参数设置动态的数据源. $('#email').autocomplete({ source : function (request, response) { //获取用户输入的内容 alert(request.term); //可以获取你输入的值 //绑定数据

jquery autocomplete 自动补全

写在前面 autocomplete是jqueryUI里的一个插件 效果和说明可以访问这里,作用类似于搜索时的自动提示: 相信用过jQuery autocomplete 自动补全功能同学有不少,但是往往我们所对应的需求不同,有的仅仅是为了省事,敲两个字就有一堆可供选择的信息可供选择,但并不是所有需求都是这样的,我们还有这样的需求,敲两个字,将这个文字对应的实体绑定出来. 主要的参数 jQuery UI Autocomplete常用的参数有: Source:用于指定数据来源,类型为String.Ar

jquey ui 实现注册,邮箱自动补全

//----------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------- //静态页面 <!DOCTYPE html> <html> <head> <

jquery.autocomplete 自动补全 应用

下拉自动补全的js控件还是很多的,不过好多都被集成在N多组件之一了,像Jquery.easyui,jquery.chonsen等等都可以实现类似的功能.但我想要的是是一款简单轻巧,应用于整个系统的js. 于是我选择了jquery.autocomplete.js,基本参数注解参考:http://www.cnblogs.com/EWall/archive/2011/04/28/2031613.html,JS及相关CSS可在google code下载,链接https://code.google.com

jquery UI邮箱自动补全

<1> 自动补全(autocomplete),是一个可以减少用户输入完整信息的UI 工具.一般在输入邮箱.搜索关键字等,然后提取出相应完整字符串供用户选择. <html> <head> <title></title> <script src="js/jquery-1.11.2.js"></script> <script src="js/jquery-ui.js"><

jquery.autocomplete自动补全功能

项目实例: 一:js //SupplierAutoComplete.js $().ready(function () { $("#txtSupplier").autocomplete("ajax?name=GetSupplierList", { minChars: 1, //在触发autoComplete前用户至少需要输入的字符数.Default: 1,如果设为0,在输入框内双击或者删除输入框内内容时显示列表 max: 10, //autoComplete下拉显示项

jQuery Autocomplete 自动补全功能

使用Autocomplete可以很简单的就有文本框的自动补全功能提示了. 在HTML文件中引入autocomplete的js文件和css样式文件,以及autocomplete压缩包中的jQuery的js文件,不要私自用高版本的jQuery,可能会导致显示不出效果. 先来从网友那里拷贝过来的最简单的例子: <span style="font-size:24px;"><!DOCTYPE html> <html> <head> <meta

仿知乎登陆邮箱自动补全

项目要求: 登陆界面输入邮箱,自动匹配常用邮箱并自动补全后缀. 比如邮箱为[email protected],当我输入[email protected]时,输入框自动补全后面的q.com且颜色为灰浅色,输入框失去焦点时,补全q.com颜色变为黑色,和前面[email protected]的颜色一致. 解决: 1.通过查看知乎的布局,发现没有用自定义控件,仅仅用了普通的EditText. 2.查看EditTex(继承TextView)t的API,最终想到了用下面这个方法 void android.