欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一個(gè)仿微博登陸郵箱提示框js開發(fā)案例

 更新時(shí)間:2016年07月28日 17:28:46   作者:macanfa  
這篇文章主要為大家詳細(xì)介紹了一個(gè)仿郵箱登錄提示框js開發(fā)案例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

最近在好好的研究JS,通過(guò)一個(gè)仿郵箱登錄提示框的案例加深下對(duì)面向?qū)ο蟮睦斫?!啥都別說(shuō),先上圖:

功能:實(shí)現(xiàn)正則匹配顯示相符的內(nèi)容、鍵盤事件、鼠標(biāo)事件

簡(jiǎn)單布局:

<div id="login">
  <h2>仿微博登錄</h2>
  <div class="detail">
    <input type="text" placeholder='郵箱/會(huì)員賬號(hào)/手機(jī)號(hào)' autocomplete='off' class='name' id='nameInput' maxlength='18'>
  </div>
  <div class="detail">
    <input type="password" placeholder='請(qǐng)輸入密碼' autocomplete='off' class='password'>
  </div>
  <ul id='suggest'>
    <li class="note">請(qǐng)選擇郵箱類型:</li>
    <li class="item" email=""></li>
    <li class="item" email="@sina.com">@sina.com</li>
    <li class="item" email="@163.com">@163.com</li>
    <li class="item" email="@qq.com">@qq.com</li>
    <li class="item" email="@126.com">@126.com</li>
    <li class="item" email="@sina.cn">@sina.cn</li>
    <li class="item" email="@139.com">@139.com</li>
  </ul>
</div>

CSS代碼:

body,ul,li,h2{margin:0;padding:0;color:#ccc;}
ul{list-style-type: none;}
#login{width:250px;background:#fff;border:1px solid #ccc;text-align: center;margin:10px auto;position:relative;}
#login h2{background:#FA7D3C;color:#fff;line-height:40px; }
.detail{}
.detail input{width:220px;height:30px;margin:10px auto;border:1px solid #ccc;padding-left:5px;}
#suggest{width:225px;height:auto;background:#fff;border:1px solid #ccc;position:absolute;top:84px;left:12px;display: none;}
#suggest li{width:225px;height:25px;line-height:25px;text-align: left;cursor: pointer;}
#suggest li.note{color:#989090;}
#suggest li.active{background:#eee;}

JS代碼:

window.onload=function(){
  var s1=new Suggest();
  s1.init();
};
function Suggest(){
  this.oInput=document.getElementById('nameInput');
  this.oUl=document.getElementById('suggest');
  this.aLi=this.oUl.getElementsByTagName('li');
}
Suggest.prototype={
  init:function(){
    this.toChange();
    this.toBlur();
  },
  toChange:function(){
    //ie:onpropertychange
    //標(biāo)準(zhǔn):oninput
    /*判斷IE瀏覽器最短方法:var isIE = !-[1,]*/
    var ie=!-[1,];
    //存this指向,this指向問(wèn)題
    var This=this;
    if(ie){
      this.oInput.onpropertychange=function(){
        if(This.oInput.value==''){
          This.tips();//?解決ie下空值時(shí)li新增內(nèi)容不置空情況
          return;
        }

        This.showUl();
        This.tips();
        This.sel(1);//選中第一條
      };
    }else{
      this.oInput.oninput=function(){
        This.showUl();
        This.tips();
        This.sel(1);//選中第一條
      }
    }
  },
  showUl:function(){
    this.oUl.style.display='block';
  },
  toBlur:function(){
    var This=this;
    this.oInput.onblur=function(){
      This.oUl.style.display='none';
    }
  },
  tips:function(){

    var value=this.oInput.value;
    //正則匹配
    var re=new RegExp('@'+value.substring(value.indexOf('@')+1)+'');
    // console.log(re);
    //bug修復(fù):全部?jī)?nèi)容一次性清空仍可出現(xiàn)提示
    for(var i=1;i<this.aLi.length;i++){
      this.aLi[i].style.display='block';
    }
    if(re.test(value)){//匹配@輸入后情況
      for(var i=1;i<this.aLi.length;i++){
        var oEmail=this.aLi[i].getAttribute('email');
        if(i==1){
          this.aLi[i].innerHTML=value;
        }else{

          if(re.test(oEmail)){//匹配項(xiàng)顯示,否則隱藏
            this.aLi[i].style.display='block';
          }else{
            this.aLi[i].style.display='none';
          }
        }
      }
    }else{//未輸入@之前
      for(var i=1;i<this.aLi.length;i++){
        var oEmail=this.aLi[i].getAttribute('email');
        if(!oEmail){
          this.aLi[i].innerHTML=value;
        }else{
          this.aLi[i].innerHTML=value+oEmail;
        }
      }
    }

  },
  sel:function(iNow){//傳入當(dāng)前索引

    var This=this;
    //每次改變重新設(shè)置類型,不會(huì)重復(fù)
    for(var i=1;i<this.aLi.length;i++){
      this.aLi[i].className='item';
    }

    if(this.oInput.value==''){
      this.aLi[iNow].className='item';
    }else{
      this.aLi[iNow].className='active';
    }

    for(var i=1;i<this.aLi.length;i++){
      this.aLi[i].index=i;
      this.aLi[i].onmouseover=function(){
        for(var i=1;i<This.aLi.length;i++){
          This.aLi[i].className='item';
        }
        this.className='active';
        iNow=this.index;//當(dāng)前索引
      };
      //鼠標(biāo)點(diǎn)擊事件:
      this.aLi[i].onmousedown=function(){
        This.oInput.value=this.innerHTML;
      }
    }
    //鍵盤事件:
    this.oInput.onkeydown=function(e){
      var e=e||window.event;
      if(e.keyCode==38){//上

        if(iNow==1){
          iNow=This.aLi.length-1;
        }else{
          iNow--;
        }
        for(var i=1;i<This.aLi.length;i++){
          This.aLi[i].className='item';
        }
        This.aLi[iNow].className='active';

      }else if(e.keyCode==40){//下

        if(iNow==This.aLi.length-1){
          iNow=1;
        }else{
          iNow++;
        }
        for(var i=1;i<This.aLi.length;i++){
          This.aLi[i].className='item';
        }
        This.aLi[iNow].className='active';

      }else if(e.keyCode==13){//回車
        This.oInput.value=This.aLi[iNow].innerHTML;
        This.oInput.blur();//回車后觸發(fā)blur事件隱藏ul層
      }
    }
  }

}

需要處理好多個(gè)分支情況,處理好小細(xì)節(jié),也感覺(jué)面向?qū)ο笾斜容^常遇到是this指向的問(wèn)題,通過(guò)這個(gè)案例好好地理解了下this。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 深入理解Promise.all

    深入理解Promise.all

    這篇文章主要介紹了深入理解Promise.all,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • 淺談JavaScript之事件綁定

    淺談JavaScript之事件綁定

    關(guān)于 JavaScript 的事件綁定在網(wǎng)上已經(jīng)有不少相關(guān)的資料了,今天這篇文章也是在被同事問(wèn)及的時(shí)候才順便把它記錄下來(lái),算是 JavaScript 事件綁定中的一個(gè)小技巧,如果能在工作中善加利用,會(huì)有出其不意的效果
    2013-07-07
  • js DNA動(dòng)態(tài)序列比對(duì)代碼

    js DNA動(dòng)態(tài)序列比對(duì)代碼

    JavaScript動(dòng)態(tài)序列比對(duì)代碼,隨便 寫著玩的,在網(wǎng)上見(jiàn)到用VC、VB寫的比較多,這個(gè)算法以前在高中課本上見(jiàn)到過(guò),我只是用Js寫一下試試,或許還不是太準(zhǔn)確。
    2010-07-07
  • JS實(shí)現(xiàn)簡(jiǎn)單的下雪特效示例詳解

    JS實(shí)現(xiàn)簡(jiǎn)單的下雪特效示例詳解

    很多南方的小伙伴可能沒(méi)怎么見(jiàn)過(guò)或者從來(lái)沒(méi)見(jiàn)過(guò)下雪,這篇文章小編給大家?guī)?lái)一個(gè)小Demo,模擬了下雪場(chǎng)景。感興趣的小伙伴快來(lái)跟隨小編一起學(xué)習(xí)一下吧
    2021-12-12
  • 15個(gè)頂級(jí)開源JavaScript框架和庫(kù)

    15個(gè)頂級(jí)開源JavaScript框架和庫(kù)

    今天小編就為大家分享一篇關(guān)于15個(gè)頂級(jí)開源JavaScript框架和庫(kù)的文章,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-10-10
  • 詳解JS ES6變量的解構(gòu)賦值

    詳解JS ES6變量的解構(gòu)賦值

    這篇文章主要介紹了JS ES6變量的解構(gòu)賦值,對(duì)ES6感興趣的同學(xué),可以參考下
    2021-05-05
  • js中l(wèi)ess常用的方法小結(jié)

    js中l(wèi)ess常用的方法小結(jié)

    下面小編就為大家?guī)?lái)一篇js中l(wèi)ess常用的方法小結(jié)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • 從setTimeout看js函數(shù)執(zhí)行過(guò)程

    從setTimeout看js函數(shù)執(zhí)行過(guò)程

    這篇文章主要介紹了從setTimeout看js函數(shù)執(zhí)行過(guò)程,需要的朋友可以參考下
    2017-12-12
  • JavaScript中調(diào)用函數(shù)的4種方式代碼實(shí)例

    JavaScript中調(diào)用函數(shù)的4種方式代碼實(shí)例

    這篇文章主要介紹了JavaScript中調(diào)用函數(shù)的4種方式代碼實(shí)例,本文分別給出方法調(diào)用模式、函數(shù)調(diào)用模式、構(gòu)造器調(diào)用模式、apply調(diào)用模式4種方式的代碼實(shí)例,需要的朋友可以參考下
    2015-07-07
  • JS實(shí)現(xiàn)關(guān)鍵字搜索時(shí)的相關(guān)下拉字段效果

    JS實(shí)現(xiàn)關(guān)鍵字搜索時(shí)的相關(guān)下拉字段效果

    關(guān)鍵字搜索時(shí)有下拉字段,在使用百度時(shí)會(huì)遇到,本例講述用js實(shí)現(xiàn)類似的效果
    2014-08-08

最新評(píng)論