`

邮箱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';
    }
  }
})();

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics