jquery输入框邮箱下拉提示层
图为:

HTML代码为:
1 <h1 class="tit-h1">jquery输入框邮箱下拉提示层</h1> 2 <div class="wrap"> 3 <div class="login"> 4 <div style="padding:0 0 0 78px;"><input type="text" maxlength="128" name="loginName" id="loginName" placeholder="邮箱/会员帐号/手机号" /></div> 5 <ul class="on_changes" style="position: absolute; left: 78px; top: 42px"> 6 <li email="">请选择邮箱类型</li> 7 <li email=""></li> 8 <li email="@sina.com"></li> 9 <li email="@163.com"></li> 10 <li email="@qq.com"></li> 11 <li email="@hotmail.com"></li> 12 <li email="@126.com"></li> 13 <li email="@gmail.com"></li> 14 <li email="@yahoo.com"></li> 15 </ul> 16 </div> 17 </div> 18 <script type="text/javascript" src="js/jquery-1.11.3.min.js"></script> 19 <script type="text/javascript" src="js/inputmail.js"></script> 20 <script type="text/javascript"> 21 $(function(){ 22 $("#loginName").changeTips({ 23 divTip:".on_changes" 24 }); 25 }) 26 </script>
JS插件为:
1 (function($){ 2 $.fn.extend({ 3 "changeTips":function(value){ 4 value=$.extend({ 5 divTip:"" 6 },value) 7 var $this=$(this); 8 var indexLi=0; 9 10 //点击document隐藏下拉层 11 $(document).click(function(event){ 12 if($(event.target).attr('class')==value.divTip || $(event.target).is('li')){ 13 var liVal=$(event.target).text(); 14 $this.val(liVal); 15 blus(); 16 }else{ 17 blus(); 18 } 19 }) 20 //隐藏下拉层 21 function blus(){ 22 $(value.divTip).hide(); 23 } 24 //键盘上下执行的函数 25 function keychange(up){ 26 if(up == 'up'){ 27 if(indexLi == 1){ 28 indexLi = $(value.divTip).children().length - 1; 29 }else{ 30 indexLi--; 31 } 32 }else{ 33 if(indexLi == $(value.divTip).children().length -1){ 34 indexLi = 1 35 }else{ 36 indexLi++; 37 } 38 } 39 $(value.divTip).children().eq(indexLi).addClass('active').siblings().removeClass(); 40 } 41 //输入框值发生变化 42 function valChange(){ 43 var tex =$this.val(); //输入框的值 44 var fronts='';//存放含有“@”之前的字符串 45 var af=/@/; 46 var regMail=new RegExp(tex.substring(tex.indexOf('@'))); //有“@”之后的字符串,注意正则字面量方法,是不能用变量的。所以这里用的是new方式。 47 48 //让提示层显示,并对里面的LI遍历 49 if($this.val() ==''){ 50 blus(); 51 }else{ 52 $(value.divTip).show().children().each(function(index){ 53 var valAttr=$(this).attr('email'); 54 if(index==1){ 55 $(this).text(tex).addClass("active").siblings().removeClass(); 56 } 57 //索引值大于1的LI元素进行处理 58 if(index > 1){ 59 //当输入的值有“@”的时候 60 if(af.test(tex)){ 61 //如果含有“@”就截取输入框这个符号之前的字符串 62 fronts=tex.substring(tex.indexOf("@"),0); 63 $(this).text(fronts + valAttr); 64 //判断输入的值“@”之后的值,是否含有和LI的email属性 65 if(regMail.test($(this).attr('email'))){ 66 $(this).show(); 67 }else{ 68 if(index > 1){ 69 $(this).hide(); 70 } 71 } 72 }//当输入的值没有“@”的时候 73 else{ 74 $(this).text(tex + valAttr); 75 } 76 } 77 }) 78 } 79 } 80 //输入框值发生改变的时候执行函数,这里的事件用判断处理浏览器兼容性; 81 // if($.browser.msie){//$.browser.msie在1.9以后的jQuery中不存在了,所以报错 82 // $(this).bind("propertychange",function(){ 83 // valChange(); 84 // }) 85 // }else{ 86 // $(this).bind("input",function(){ 87 // valChange(); 88 // }) 89 // } 90 $(this).bind("input",function(){ 91 valChange(); 92 }) 93 //鼠标点击和悬停LI 94 $(value.divTip).children().hover(function(){ 95 indexLi=$(this).index();//获取当前鼠标悬停时的LI索引值 96 if($(this).index() !=0){ 97 $(this).addClass('active').siblings().removeClass(); 98 } 99 }); 100 //按键盘的上下移动LI的背景色 101 $this.keydown(function(event){ 102 if(event.which == 38){//向上 103 keychange('up'); 104 }else if(event.which == 40){//向下 105 keychange(); 106 }else if(event.which ==13){//回车 107 var liVal=$(value.divTip).children().eq(indexLi).text(); 108 $this.val(liVal); 109 blus(); 110 } 111 }) 112 } 113 }) 114 })(jQuery)
本地效果为:desk/plug/inputEmail/demo.html
线上效果为:http://www.jq22.com/jquery-info4397
浙公网安备 33010602011771号