jQuery實(shí)現(xiàn)郵箱下拉列表自動(dòng)補(bǔ)全功能
記得,在上個(gè)項(xiàng)目中,遇到這樣一個(gè)需求,網(wǎng)站要求填寫郵箱的時(shí)候,還沒(méi)有填寫完,就會(huì)出現(xiàn)一系列下拉列表,幫助自動(dòng)補(bǔ)全郵箱的功能。今天小編給給大家分享下我基于jquery是怎么實(shí)現(xiàn)此功能的!
功能簡(jiǎn)述
•填寫郵箱名字,出現(xiàn)下拉列表,自動(dòng)補(bǔ)全郵箱
•點(diǎn)擊上下按鍵,選取下拉列表郵箱
•按回車鍵,選中列表內(nèi)容,隱藏下拉列表
•鼠標(biāo)經(jīng)過(guò),下拉列表選項(xiàng)設(shè)置為高亮
•鼠標(biāo)點(diǎn)擊,選中下拉列表選項(xiàng),隱藏下拉列表
HTML
HTML代碼很簡(jiǎn)單,我們就一個(gè)簡(jiǎn)單的輸入框,然后一個(gè)ul標(biāo)簽,在內(nèi)部可以放好多l(xiāng)i標(biāo)簽。
<html> <head> <meta charset="utf-8"/> <script src="js/jquery.min.js"></script> <script src="js/main.js"></script> <link href="css/style.css" rel="stylesheet"/> </head> <body> <div class="content"> <input type="text" name="email" id="email" placeholder="請(qǐng)輸入您的郵箱"/> <ul class="list"></ul> </div> </body> </html>
以上便是HTML代碼
CSS
在CSS中,定義也比較簡(jiǎn)單,其中有一個(gè) lilight 的 class,可以使背景變色,通過(guò) remove 和 add 這個(gè) class,我們可以輕松地實(shí)現(xiàn)下拉列表元素是否選中的區(qū)分。
CSS所有樣式如下
.content input{ padding:5px 10px; width:200px; } ul.list{ list-style:none; padding:0px; margin:0px; overflow:hidden; } ul.list li{ border:1px solid #EEE; width:180px; padding:5px 10px; margin:0px; text-overflow:ellipsis; //溢出時(shí)變?yōu)槭÷? overflow:hidden; } .lilight{ background-color:#fafafa; }
JS
我們引入 jQuery 來(lái)實(shí)現(xiàn)對(duì)元素的操作,實(shí)現(xiàn)了按鍵和鼠標(biāo)監(jiān)聽,代碼如下
$(function(){ //聲明所有的電子郵件變量 var mail=new Array("sina.com.cn","126.com","163.com","gmail.com","qq.com","vip.qq.com","hotmail.com","sohu.com","139.com","vip.sina.com","cuiqingcai.com"); //生成一個(gè)個(gè)li,并加入到ul中 for(var i=0;i<mail.length;i++){ var liElement=$("<li class=\"autoli\"><span class=\"ex\"></span><span class=\"at\">@</span><span class=\"tail\">"+mail[i]+"</span></li>"); liElement.appendTo("ul.list"); } //首先讓list隱藏起來(lái) $("ul.list").hide(); $("#email").keyup(function(event){ //鍵入的內(nèi)容不是上下箭頭和回車 if(event.keyCode!=38&&event.keyCode!=40&&event.keyCode!=13){ //如果輸入的值不是空或者不以空格開頭 if($.trim($(this).val())!=""&& $.trim($(this).val()).match(/^@/)==null){ $("ul.list").show(); //如果當(dāng)前有已經(jīng)高亮的下拉選項(xiàng)卡,那么將其移除 if($("ul.list li:visible").hasClass("lilight")){ $("ul.list li").removeClass("lilight"); } //如果還存在下拉選項(xiàng)卡,那么將其高亮 if($("ul.list li:visible")){ $("ul.list li:visible:eq(0)").addClass("lilight"); } }else{ //否則不進(jìn)行顯示 $("ul.list").hide(); $("ul.list li").removeClass("lilight"); } //輸入的內(nèi)容還沒(méi)有包括@符號(hào) if($.trim($(this).val()).match(/.*@/)==null){ $(".list li .ex").text($(this).val()); }else{ //輸入的符號(hào)已經(jīng)包含了@ var str = $(this).val(); var strs = str.split("@"); $(".list li .ex").text(strs[0]); if($(this).val().length>=strs[0].length+1){ tail=str.substr(strs[0].length+1); $(".list li .tail").each(function(){ //如果數(shù)組中的元素是以文本中的后綴開頭,那么就顯示,否則不顯示 if(!($(this).text().match(tail)!=null&&$(this).text().indexOf(tail)==0)){ //隱藏其他的li $(this).parent().hide(); }else{ //顯示所在的li $(this).parent().show(); } }); } } } //按了回車時(shí),將當(dāng)前選中的元素寫入到文本框中 if(event.keyCode==13){ $("#email").val($("ul.list li.lilight:visible").text()); $("ul.list").hide(); } }); //監(jiān)聽上下方向鍵 $("#email").keydown(function(event){ //下方向鍵按下了 if(event.keyCode==40){ if($("ul.list li").is(".lilight")){ if($("ul.list li.lilight").nextAll().is("li:visible")){ $("ul.list li.lilight").removeClass("lilight").next("li").addClass("lilight"); } } } //下方向鍵按下了 if(event.keyCode==38){ if($("ul.list li").is(".lilight")){ if($("ul.list li.lilight").prevAll().is("li:visible")){ $("ul.list li.lilight").removeClass("lilight").prev("li").addClass("lilight"); } } } }); //當(dāng)鼠標(biāo)點(diǎn)擊某個(gè)下拉項(xiàng)時(shí),選中該項(xiàng),下拉列表隱藏 $("ul.list li").click(function(){ $("#email").val($(this).text()); $("ul.list").hide(); }); //當(dāng)鼠標(biāo)劃過(guò)某個(gè)下拉項(xiàng)時(shí),選中該項(xiàng),下拉列表隱藏 $("ul.list li").hover(function(){ $("ul.list li").removeClass("lilight"); $(this).addClass("lilight"); }); //當(dāng)鼠標(biāo)點(diǎn)擊其他位置,下拉列表隱藏 $(document).click(function(){ $("ul.list").hide(); }); });
總結(jié)
其實(shí)還有一個(gè)比較強(qiáng)大的插件,叫autocomplete,同樣可以實(shí)現(xiàn)下拉列表的自動(dòng)補(bǔ)全,功能更加完善,如果大家有興趣可以去試一下。不過(guò)感覺(jué)最常用的就是郵箱自動(dòng)補(bǔ)齊,而且直接用 jQuery 就可以比較方便地實(shí)現(xiàn),所以博主就沒(méi)有使用autocomplete插件,而是自己寫了一下,一來(lái)練習(xí)一下,二來(lái)對(duì)這種功能的實(shí)現(xiàn)了解得更加透徹。
以上所述是小編給大家介紹的jQuery實(shí)現(xiàn)郵箱下拉列表自動(dòng)補(bǔ)全功能,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- jquery css實(shí)現(xiàn)郵箱自動(dòng)補(bǔ)全
- Java實(shí)現(xiàn)郵箱找回密碼實(shí)例代碼
- 如何驗(yàn)證會(huì)員系統(tǒng)中用戶的郵箱是否真實(shí)存在
- 在js中實(shí)現(xiàn)郵箱格式的驗(yàn)證方法(推薦)
- jQuery驗(yàn)證手機(jī)號(hào)郵箱身份證的正則表達(dá)式(含港澳臺(tái))
- 微信小程序-詳解微信登陸、微信支付、模板消息
- JavaWeb登陸功能實(shí)現(xiàn)代碼
- php實(shí)現(xiàn)登陸模塊功能示例
- 用AJAX實(shí)現(xiàn)頁(yè)面登陸以及注冊(cè)用戶名驗(yàn)證的簡(jiǎn)單實(shí)例
- js表單登陸驗(yàn)證示例
- 根據(jù)輸入郵箱號(hào)跳轉(zhuǎn)到相應(yīng)登錄地址的解決方法
相關(guān)文章
JQuery 設(shè)置checkbox值二次無(wú)效的解決方法
下面小編就為大家?guī)?lái)一篇JQuery 設(shè)置checkbox值二次無(wú)效的解決方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-07-07jQuery實(shí)現(xiàn)的支持IE的html滑動(dòng)條
本文給大家分享的是一段使用jQuery實(shí)現(xiàn)支持IE的html滑動(dòng)條代碼,效果非常不錯(cuò),這里推薦給大家,希望大家能夠喜歡。2015-03-03jQuery?v3.3.1的BUG以及解決辦法(附解決方案)
這篇文章描述了我們?FineUIPro?產(chǎn)品?更新中遇到的一個(gè)問(wèn)題,最終將問(wèn)題定位到?jQuery.position()?函數(shù),雖然jQuery的做法是依照HTML規(guī)范來(lái)的,但是?jQuery.offsetParent()?和?jQuery.position()?兩個(gè)函數(shù)有沖突,并且會(huì)導(dǎo)致之前的jQuery插件出錯(cuò),應(yīng)該算是一個(gè)BUG吧2023-03-03jQuery獲取當(dāng)前點(diǎn)擊的對(duì)象元素(實(shí)現(xiàn)代碼)
下面小編就為大家?guī)?lái)一篇jQuery獲取當(dāng)前點(diǎn)擊的對(duì)象元素(實(shí)現(xiàn)代碼)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧2016-05-05