`

邮箱suggest

    博客分类:
  • js
 
阅读更多
<!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>Email Suggest 邮箱输入提示演示</title>
</head>
<body>
<div id="title">
<h1>Email Suggest 邮箱输入提示演示</h1>
</div>
<div id="wrapper">
<div id="login_box">
<div class="clearfix"><label for="email">电子邮箱:</label><input type="text" id="email" autocomplete="off" /></div>
<ul id="email_list">
<li class="first_li">请选择邮箱类型</li>
<li></li>
<li>@163.com</li>
<li>@126.com</li>
<li>@qq.com</li>
<li>@yahoo.com.cn</li>
<li>@gmail.com</li>
<li>@sohu.com</li>
<li>@hotmail.com</li>
<li>@sina.com</li>
<li>@sina.cn</li>
<li>@139.com</li>
</ul>
</div>
</div>
</body>
</html> 

 

*{
  margin:0;
  padding:0
  }
  
body{background:#f3f3f3;font-size:12px;font-family:arial;}

#title{width:320px;margin:3% auto 0;}

h1{font-size:18px;}

h6{ font-size:12px; font-weight:normal; color:#333;margin-bottom:10px; }

h6 a { color:#09c; }

#wrapper{
  width:320px;
  height:30px;
  margin:30px auto 0;
  background:#fff;
  border:1px solid #ccc;
  -moz-border-radius:4px;
  border-radius:4px;
  padding:20px;
  -moz-box-shadow:1px 1px 4px #d3d3d3;
  }

#login_box{position:relative;}

.clearfix label{font-size:14px;float:left;}

.clearfix{height:30px;line-height:30px;}

.clearfix:after{height:0;visibility:hidden;content:'.';overflow:hidden;display:block;}

#email{
  width:180px;
  height:18px;
  border:1px solid #74c9e6;
  padding:5px 6px;
  background:#fff;
  margin-left:10px;
  -moz-border-radius:2px;
  border-radius:2px;
  font-family:arial;
  float:left;
  }

#email_list{
  width:192px;
  list-style:none;
  border:1px solid #74c9e6;
  -moz-border-radius:0 0 2px 2px;
  border-radius:2px;
  position:absolute;
  top:29px;
  left:80px;
  background:#fff;
  display:none;
  }


#email_list li{
  width:100%;
  height:30px;
  line-height:30px;
  text-indent:10px;
  cursor:pointer;
  overflow:hidden;
  }

#email_list li.first_li{cursor:default;}

#email_list .current{background:#baeafb;}

 

(function() {
  /* 初始化 */
  var emailInput = document.getElementById('email'),
  list = document.getElementById('email_list'),
  items = list.getElementsByTagName('li'),
  item1 = items[1],
  len = items.length,
  suffix = [],
  newSuffix,
  indexA,
  indexB,
  highlight = 'current',
  isIE = navigator.userAgent.toLowerCase().indexOf('msie') != -1,
  clearClassname = function() {
    for (var i = 1,
    el; i < len && (el = items[i]); i++) {
      el.className = '';
    }
  };
  /* 将邮箱后缀存放到一个新数组中 */
  for (var j = 1,
  el; j < len && (el = items[j]); j++) {
    suffix[suffix.length++] = el.innerHTML;
  }
  /* 邮箱输入框绑定keyup事件 */
  emailInput.onkeyup = suggest;
  /* suggest核心部分 */
  function suggest(event) {
    var e = event || window.event,
    eCode = e.keyCode,
    val = this.value,
    index = val.indexOf('@'),
    isIndex = index !== -1;
    clearClassname();
    //输入框不为空
    if (val) {
      item1.className = highlight;
      list.style.display = 'block';
      for (var i = 1,
      el; i < len && (el = items[i]); i++) {
        el.onmouseover = function() {
          clearClassname();
          item1.className = '';
          this.className = highlight;
          indexA = 1;
          indexB = 0;
        }
        el.onmouseout = function() {
          this.className = '';
          item1.className = highlight;
        }
        el.onclick = function() {
          emailInput.value = this.innerHTML;
        }
      }
    }
    //输入框为空
    else {
      item1.className = '';
      for (var i = 1,
      el; i < len && (el = items[i]); i++) {
        el.onmouseout = el.onmouseover = el.onclick = null;
      }
      if (eCode === 38 || eCode === 40 || eCode === 13) return;
    }
    item1.innerHTML = val;
    newSuffix = []; //初始化空数组
    for (var i = 1,
    el; i < len && (el = items[i]); i++) {
      /* 以邮箱后缀和输入框中@标志符后是否
有相同的字符串来显示或隐藏该元素 */
      el.style.display = isIndex && el.innerHTML.indexOf(val.substring(index)) === -1 ? 'none': 'block';
      if (i > 1) el.innerHTML = (isIndex ? val.substring(0, index) : val) + suffix[i - 1];
      /* 出现@标志符时将新的元素的排列顺序
存放到空数组newSuffix中 */
      if ((!isIE && window.getComputedStyle(el, null).display === 'block') || (isIE && el.currentStyle.display === 'block')) {
        newSuffix[newSuffix.length++] = i;
      }
    }
    /* 判断按键 */
    switch (eCode) {
    case 38:
      //上方向键
      keyMove( - 1);
      break;
    case 40:
      //下方向键
      keyMove(1);
      break;
    case 13:
      //回车键
      getVal();
      break;
    default:
      indexA = 1;
      indexB = 0;
      return;
    }
  }
  /* 方向键控制元素的高亮效果 */
  function keyMove(n) {
    var newLen = newSuffix.length;
    if (newLen > 0 && newLen < 8) {
      items[newSuffix[indexB]].className = item1.className = '';
      indexB += n;
      if (indexB === newLen) indexB -= newLen;
      else if (indexB < 0) indexB += newLen;
      items[newSuffix[indexB]].className = highlight;
    } else {
      items[indexA].className = item1.className = '';
      indexA += n;
      if (indexA === len) indexA -= len - 1;
      else if (indexA === 0) indexA += len - 1;
      items[indexA].className = highlight;
    }
  }
  /* 获取当前高亮元素的值 */
  function getVal() {
    var newLen = newSuffix.length;
    emailInput.value = newLen > 0 && newLen < 8 ? items[newSuffix[indexB]].innerHTML: items[indexA].innerHTML;
    list.style.display = 'none';
  }
  /* 关闭提示层 */
  document.onclick = function(e) {
    var e = e || window.event,
    eNode = e.target ? e.target: e.srcElement;
    if (eNode !== emailInput && eNode !== items[0]) {
      list.style.display = 'none';
    }
  }
})();

 

分享到:
评论

相关推荐

    sailjson对象模板_suggest3hr_sailjsonlist_sailjson_pbjson对象_

    本篇文章主要围绕着“sailjson对象模板”,“suggest3hr”,“sailjsonlist”,以及“pbjson对象”这四个关键词,来详细阐述它们与JSON相关的知识点。 首先,我们来看“sailjson对象模板”。这是一个可能自定义的...

    飞飞模仿google(suggest)下拉提示框sggestV1.5

    &lt;script src="search_suggest.js"&gt; 此二文件必须放于调用函数之前 调用函数 **以下是调用示例**: $("#test2").suggestShow("aa","search.asp","ddd",2,1,1,"search.asp") 函数介绍: test2 必填 需要添加该插件的...

    inputSuggest文本框输入时提示、自动完成效果(邮箱输入自动补全插件)

    这个功能广泛应用于各种在线服务,例如邮箱地址输入、搜索引擎搜索框和电子商务网站的商品搜索框,以提高用户输入效率和体验。 在网页开发中,`inputSuggest` 的工作原理是监听文本框的输入事件,当用户开始输入...

    一个仿微博登陆邮箱提示框js开发案例

    - **变量声明**:在`Suggest`构造函数中,我们获取了`&lt;input&gt;`元素(邮箱输入框)和`&lt;ul&gt;`元素(邮箱后缀列表),并将其存储为对象属性。 - **原型链方法**:`Suggest.prototype`包含了两个方法`init`和`toChange`...

    Javascript自动补全类(1)

    首先,`suggest-0.1.js` 文件很可能是一个实现了自动补全功能的JavaScript库。在JavaScript中,自动补全通常基于数据结构,如数组或对象,来存储可能的补全选项。当用户在输入框中输入字符时,这个库会实时检查输入...

    Matlab Optimization Toolbox User's Guide

    - 建议邮箱:suggest@mathworks.com - Bug报告邮箱:bugs@mathworks.com - 文档错误报告邮箱:doc@mathworks.com - 注册邮箱:subscribe@mathworks.com - 服务状态、许可证续订、密码邮箱:service@mathworks.com - ...

    Real-Time Workshop Target Language Compiler

    - 增强建议邮箱:[suggest@mathworks.com](mailto:suggest@mathworks.com) - 虫子报告邮箱:[bugs@mathworks.com](mailto:bugs@mathworks.com) - 文档错误报告邮箱:[doc@mathworks.com](mailto:doc@mathworks....

    MATLAB安装文件

    - **产品建议邮箱**:suggest@mathworks.com,接收用户对产品改进的意见和建议。 - **错误报告邮箱**:bugs@mathworks.com,收集并处理用户发现的软件bug。 - **文档纠错邮箱**:doc@mathworks.com,负责修正文档中...

    MySQL安装手册.pdf

    7. 提供者信息:文档最后提到了手册的编制者信息,包括邮箱地址、所属单位以及地址,这可能表明手册是个人编写的,用于教学或个人学习目的。 8. 编辑注意事项:文档内容由于OCR技术识别错误,需要用户根据上下文...

    matlab从入门到精通

    - 技术建议邮箱:[suggest@mathworks.com](mailto:suggest@mathworks.com) - Bug报告邮箱:[bugs@mathworks.com](mailto:bugs@mathworks.com) - 文档错误报告邮箱:[doc@mathworks.com](mailto:doc@mathworks.com...

    matrixvb使用手册

    - **产品改进建议邮箱**:suggest@mathworks.com - **错误报告邮箱**:bugs@mathworks.com - **文档错误报告邮箱**:doc@mathworks.com - **订阅注册邮箱**:subscribe@mathworks.com - **订单状态查询邮箱**:...

    matalb数字信号处理英文版

    - 建议反馈邮箱:suggest@mathworks.com - Bug报告邮箱:bugs@mathworks.com - 文档错误报告邮箱:doc@mathworks.com - **联系方式**: - 地址:The MathWorks, Inc., 3 Apple Hill Drive, Natick, MA 01760-...

    Web应用前端技术的探索与实践

    6.5.2.24 内容自动完成、Suggest 174 6.5.2.24.1 效果 175 6.5.2.24.2 应用说明 176 6.5.2.25 WYSIWYG在线Html内容编辑器 179 6.5.2.25.1 SinaEditor 179 6.5.2.25.2 CKEditor 181 6.5.2.26 JMesa 184 6.5.2.26.1 ...

    MATLAB数学宝典.pdf

    - **产品增强建议邮箱**: [suggest@mathworks.com](mailto:suggest@mathworks.com) - **错误报告邮箱**: [bugs@mathworks.com](mailto:bugs@mathworks.com) ##### 3. 版权声明 文档末尾还包括了一份详细的版权声明...

    jquery自动完成简介

    ##### 3.3 邮箱地址选择 ```html &lt;label&gt;E-Mail(local): ``` ```javascript $("#email").autocomplete(emails, { minChars: 0, width: 310, matchContains: "word", // 更多配置... }); ``` - **分析*...

Global site tag (gtag.js) - Google Analytics