用面向對象解決 輸入用戶名自動顯示郵箱尾碼列表的方法

来源:http://www.cnblogs.com/parkboyoung/archive/2016/11/04/6031695.html
-Advertisement-
Play Games

恢復內容開始 當我們註冊或者登錄要用郵箱格式時會顯示郵箱尾碼的提示下拉框 效果如圖所示 主要介紹了JS輸入用戶名自動顯示郵箱尾碼列表的方法,可實現自動顯示郵箱尾碼名列表的功能, 原理是:一個輸入框 當我輸入任何字的時候 自動下拉相應的郵箱提示,在輸入框輸入11的時候 下拉框有所有11的郵箱 輸入其他 ...


---恢復內容開始---

當我們註冊或者登錄要用郵箱格式時會顯示郵箱尾碼的提示下拉框

效果如圖所示

效果

主要介紹了JS輸入用戶名自動顯示郵箱尾碼列表的方法,可實現自動顯示郵箱尾碼名列表的功能,

 

原理是:一個輸入框 當我輸入任何字的時候 自動下拉相應的郵箱提示,在輸入框輸入11的時候 下拉框有所有11的郵箱 輸入其他的時候 有其他文案對應的郵箱。

同理 此插件不需要任何html標簽,只需要一個輸入框 有相對應的id類名就ok 且父級有個class類名,其他的都不需要。內部的HTML代碼都是自動生成的

下麵便是此功能代碼;

此段代碼引用了jq 所以需要先引入jq.js;

<script src="http://apps.bdimg.com/libs/jquery/1.6.4/jquery.js"></script>

把我們需要提示的郵箱尾碼存入數組;

var emailsorce = ["@sina.com", "@163.com", "@qq.com", "@126.com", "@vip.sina.com",
    "@sina.cn", "@hotmail.com", "@gmail.com", "@sohu.com", "@yahoo.cn", "@139.com",
    "@wo.com.cn", "@189.cn"];

  接下來就是面向對象的內容,中間都有註釋;

var email={
    init:function(){
        var that=this;
        $("#email").focus(function(){
            if($(this).val()==""){
                that.hint();
            }else{
                $("#closeuser").css({"display": "block"});//消除按鈕顯示
            }
        })
    },
    bindeven:function(){
        this.chose();
        this.delet();
        this.miss();
    },
    miss:function(){//失去焦點刪除按鈕隱藏 下拉選項消失 判斷是否為郵箱格式
        $("#email").blur(function(){
            $("#closeuser").css({"display": "none"});
            $("#sele").css({"display": "none"});
            var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;//郵箱正則表達式
            if(filter.test($("#email").val())){//是郵箱格式
                $("#email").css({"border":"0.1rem solid #0cbd19"})
            }else{//不是郵箱格式
                $("#email").css({"border":"0.1rem solid #ff072f"})
            }
        })
    },
    hint:function(){//初始輸入出現郵箱選項 消除按鈕出現
        var that=this;
        $("#email").on("input",function(){
            if($(this).val()!=""){
                if($(this).val().indexOf("@")==-1){//是否輸入到@
                    $("#sele").html("");//每次輸入初始化
                    $("#sele").css({"display": "block"});
                    for(var i=0;i<emailsorce.length;i++){//把集合的郵箱加入li中
                        var li=$("<li>"+$(this).val()+emailsorce[i]+"</li>");
                        $("#sele").append(li);
                    }
                    $("#closeuser").css({"display": "block"});//消除按鈕顯示

                }else{
                    var arr=$(this).val().split("@");
                    if(arr[1]!=""){//篩選@之後的內容
                        $("#sele").html("");//每次輸入初始化
                        for(var i=0;i<emailsorce.length;i++){
                            var temp=emailsorce[i].split(".")[0];
                            if(temp.indexOf(arr[1])!=-1){//篩選選項是否含有輸入的內容 有顯示 沒有隱藏
                                var li=$("<li>"+arr[0]+emailsorce[i]+"</li>");
                                $("#sele").append(li);
                            }
                        }
                    }
                }
            }else{
                //單框內沒內容消除按鈕隱藏 下拉選項隱藏
                $("#closeuser").css({"display": "none"});
                $("#sele").css({"display": "none"});
            }
        })
    },
    chose:function(){
        $(document).on("touchstart","#sele li",function(){
            //點擊下拉框選項 框內內容為點擊選項 下拉框消失 刪除按鈕消失
            $("#email").val($(this).html());
            $("#closeuser").css({"display": "none"});
            $("#sele").css({"display": "none"});
        })

    },
    delet:function(){
        //框內內容刪除 下拉框隱藏
        $(document).on("touchstart","#closeuser",function(){
            //點擊消除按鈕事件
            $("#email").val("");
            $("#sele").css({"display": "none"});
            $("#closeuser").css({"display": "none"});
        })
    }
}

  下麵只要調用就ok了;

email.init();
email.bindeven();

  

 一、功能分析:   1.input輸入框的值,發生變化時,顯示提示的下拉層;   2.input輸入框的值,發生變化時,顯示提示的下拉層,會根據輸入的內容自動往“@”前面添加;   3.input輸入框的值,發生變化時,顯示提示的下拉層,會根據輸入的內容對下拉層“@”後面的內容進行篩選;   4.點擊下拉層裡面的提示內容,會將其值,填充到輸入框;   5.按下滑鼠回車鍵會將其選中的下拉層里的內容,填充到輸入框;   6.按鍵盤的“向上”或“向下”的方向鍵,可以在下拉層的選項中移動(迴圈移動,改變當前LI的背景色);   7.滑鼠懸停在下拉層的LI上面時,會有一個背景色。 二、功能實現:   1.input輸入框的值,發生變化時的事件是:propertychange(IE)或input(標準);   2.在發生propertychange事件的時候,取其輸入框的值,再取其“@”前面的值,並賦值給下拉層裡面的LI加上LI的email屬性值;   3.在發生propertychange事件的時候,     3.1取其輸入框的值,再取其“@”後面的值,     3.2並將這個值與下拉層裡面的LI的email屬性值進行正則匹配;       這裡要註意,正則字面量方法,是不能用變數的。所以這裡用的是new方式。       這裡的正則是取的輸入框“@”後面的值,所以正則,是變化的。而LI的EMAIL屬性值是不變的   4.這裡用了一個事件委托方式,將點擊事件綁定給document,然後通過判斷,點擊時最初觸發的DOM元素,是什麼。來決定,     4.1否隱藏下拉提示層?     4.2還是需要將下拉層,選中的值,賦給輸入框     (這裡不能直接使用,當輸入框失去焦點時,隱藏下拉提示層,因為會與點擊下拉層,將其值填入輸入框,這個功能有邏輯上的矛盾;)   5.和上面第4條差不多;   6.就是要註意,在滑鼠懸停時,把當前的LI索引存入一個全局變數當中,這樣就可以告訴“向上”或“向下”按鍵時,的起始位置了;

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在WebGL場景中導入多個Babylon骨骼模型,在區域網用WebSocket實現多用戶交互控制。 ...
  • 時光轉眼即逝,又到周六了,今天寫點某部分人看不起的css玩玩! 轉換 轉換屬性transform: 瀏覽器首碼: -webkit-transform;-o-transform;-moz-transform;-ms-transform; 取值: none : 預設值,沒有轉換操作 transform- ...
  • 1、操作元素之屬性: ①attr讀:$(“selector”).attr(“屬性名”);=>getAttribute(“屬性名”);改:$(“selector”).attr(“屬性名”,值);=>setAttribute(“屬性名”,值);*(*無法訪問不再開始標簽中存在的prop屬性;例:chec ...
  • 很多人會用sort(),並不見得知道它具體是怎樣給數字排序的。其實不知道也行,會用就可以,感興趣的可以來看看。 用過sort()函數的都知道上面代碼其實就是將數組裡的元素從小到大排序,返回結果[1,2,3,4]。 為了弄清楚sort()是怎樣進行數字比較和移動,最後排好序的,我加三行代碼,讓它把每一 ...
  • var EventHandle = { addEvent:function(ele,type,handle){ if (ele.addEventListener) { ele.addEventListener(type,handle,false); }else if(attachEvent){ el ...
  • html部分 <!DOCTYPE html> <!--下麵三個百分比都是為了實現後期項目優化的時候,實現自適應屏幕的寬度和高度--> <html style="height: 100%;"> <!--這個需要HTML標簽上也得加上style="height:100%"才行,要不然會顯示一半,經常用C ...
  • 今天項目需要用到旋轉木馬輪播功能,需要顯示個可以切換的選項,這幾個選項也許是圖片,也許是文字,也許是一個iframe頁面,也有可能是圖文混排,還可能需要支持調用介面數據,需要顯示多條信息,最少3條,最多不限,可能有10條,可能有10000條,於是就有了下麵這個實現方法,看上去已經很完美了(樣式和具體... ...
  • 簡介 技術一般水平有限,有什麼錯的地方,望大家指正。 sessionStorage、localStorage、cookie這三個是我們在瀏覽器端用來存儲數據的,cookie使用起來較為繁瑣以後進行總結,主要介紹一下sessionStorage和localStorage的用法。sessionStora ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...