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>
 

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

  1. 【jquery】邮箱自动补全 + 上下翻动

    最近在做通行证项目,里面注册模块有邮箱注册,需求方想要在输入 @ 后触发下拉框显示各个邮箱,效果如下: html 代码: <!DOCTYPE HTML> <html lang=&qu ...

  2. jquery+css实现邮箱自动补全

    今天在公司做一个电子商务网站的注册会员时,要求用户在电子邮箱文本框中输入时,给与热点提示常用的电子邮箱,帮助用户选择,提高体验效果.下面是用Jquery+css实现的邮箱自动补全,供大家参考和学习. ...

  3. js邮箱自动补全

    邮箱自动补全js和jQuery html: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &q ...

  4. jQuery AutoComplete 自动补全

    jQuery.AutoComplete是一个基于jQuery的自动补全插件.借助于jQuery优秀的跨浏览器特性,可以兼容Chrome/IE/Firefox/Opera/Safari等多种浏览器. 特 ...

  5. Eclipse没法自动补全代码解决

    Eclipse没法自动补全代码解决   Eclipse无法自动补全代码解决 Window->Java->Editor->Content Assist->Advanced

  6. sublime3添加verilog自动补全代码段

    前言 sublime默认的verilog自动补全十分垃圾,不过提供了代码段这个功能,你可以自己写个重用率高的代码段减轻工作量.写个模板当tb也很爽啦. 流程 1.打开user文件夹,创建verilog ...

  7. [转载]Jupyter Notebook中自动补全代码

    原文地址:https://yq.aliyun.com/articles/667928 在公众号之前的文章中,已经介绍了在Jupyter Notebook中设置主题以及输出代码文件到pdf文件中,本文来 ...

  8. jquery实现自动补全邮箱地址

    开始做的邮箱补全代码 //检查email邮箱 function isEmail(str) { if (str.indexOf("@") > 0) { return true; ...

  9. jquery.autocomplete自动补全功能

    项目实例: 一:js //SupplierAutoComplete.js $().ready(function () { $("#txtSupplier").autocomplet ...

随机推荐

  1. HTML5-格式化

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  2. LDA和PLSA

    看了<LDA数学八卦>和July的博客,里面涉及到好多公式推导...感觉好复杂,于是记录一些重点简洁的东西,忽略大批量铺垫,直接回答LDA和PLSA是区别: 在pLSA模型中,我们按照如下 ...

  3. C# 通过服务启动窗体(把窗体添加到服务里)实现用户交互的windows服务[转发]

    由于个人需要,想找一个键盘记录的程序,从网上下载了很多,多数都是需要注册的,另外也多被杀软查杀.于是决定自己写一个,如果作为一个windows应用程序,可以实现抓取键盘的记录.想要实现随系统启动的话, ...

  4. 七牛php sdk 生成上传凭证时出现 undefined function Qiniu_SetKeys()

    将qiniu/http.php文件改名即可,原因是xampp等集成环境会安装pear存在了http.php

  5. linux配置java环境变量(详细) -copy

    一. 解压安装jdk 在shell终端下进入jdk-6u14-linux-i586.bin文件所在目录, 执行命令 ./jdk-6u14-linux-i586.bin 这时会出现一段协议,连继敲回车, ...

  6. Intel VT-x 基本概念

    看IaaS 资料时,捎带研究下硬件虚拟化,主要参考<基于intel VT-x 的Xen 全虚拟化实现>,<intel 开发手册 第三卷 19/20章> Intel VT 是in ...

  7. 开发者必知的几款App快速开发工具

    “我有一个好创意,就差一个CTO……” ,这是今年炒的比较火的一句话. “原生APP开发难度大,周期长,成本高,还没上线市场已经被占领了.这个有没有解决方案?” “APP版本迭代更新,都是企业的一道难 ...

  8. C语言#自动生成四则运算的编程

    #include <iostream> #include <stdio.h> #include <stdlib.h> #include <time.h> ...

  9. 可拖动的DIV

    在做WEB UI设计的时候,拖动某个HTML元素已经成为一种不能忽视的用户界面模式,比较典型的应用例子就是Dialog,一个元素是怎么实现拖动的呢?其实原理非常简单,要想实现首先得了解几个基本知识. ...

  10. redis系列-redis的持久化

    redis对数据的持久化有两种方式:RDB(快照保存)和AOF(命令日志). RDB 介绍:将内存快照保存到磁盘,dump.rdb二进制文件 触发:满足“N 秒内数据集至少有 M 个改动”,或使用sa ...