html5 為input提供email域名自動賦值提示


  產品反饋用戶總是輸錯email的域名,因此服務器得到的email的地址是錯誤的。比如,有許多用戶總將xxx@qq.com輸入成xxx@qq.con。

  這讓后端很煩惱,因為這個email地址是合法的,但是錯誤也是那么明顯的(常識判斷,至於qq.con域名是否存在我也不知道)。

  

  為了解決這個錯誤,下午折騰了一小時,使用到了html5 input里的新的list屬性,當用戶輸入'@'后為用戶提示域名信息。如圖:

  

 

 

 

  但是后來悲劇的發現這個屬性在safari中不支持,從而在App中也無法支持,估計只能在chrome中使用了。就當學習了。貼上代碼,大致思路是監聽用戶輸入'@'后,構造datalist,並關聯到input上。依賴jquery。

 

(function(){
    var emails = [{domain: '@qq.com', label: 'qq郵箱'}, 
                {domain: '@163.com',  label: '163郵箱'},
                {domain: '@126.com', label: '126郵箱'},
                {domain: '@hotmail.com', label: 'hotmail郵箱'},
                {domain: '@sina.com', label:'sina郵箱'},
                {domain: '@gmail.com',label:'gmail郵箱'}, 
                {domain: '@139.com', label: '139郵箱'}, 
                {domain:'@yahoo.com.cn', label: 'yahoo中國郵箱'}];
                
    var addEmailHelp = function(id, otherAddress){
        var inputObj = $('input#' + id);
        if(inputObj.length == 0){
            return;
        }
        
        inputObj.keyup(function (ev) {
            var val = $(inputObj).val();
            var lastInputKey = val.charAt(val.length - 1);
            
            if (lastInputKey == '@') {
                var indexOfAt = val.indexOf('@');
                var username = val.substring(0, indexOfAt);

                if ($('datalist#emailList').length > 0) {
                    $('datalist#emailList').remove();
                }

                $(inputObj).parent().append('<datalist id="emailList"></datalist>');
                for (var i in emails) {
                    $('datalist#emailList').append('<option value="' + username + emails[i].domain + '" label="' + emails[i].label + '" />');
                }
                
                if(otherAddress != null && typeof otherAddress != 'undefined'){
                    for (var i in otherAddress) {
                    $('datalist#emailList').append('<option value="' + username + otherAddress[i].domain + '" label="' + otherAddress[i].label + '" />');
                    }
                }

                $(inputObj).attr('list', 'emailList');
            }
        })
    };
    
    window.addEmailHelp = addEmailHelp;
})();

 

  使用方法是為先為input設置一個id,然后用addEmailHelp(id, otherAddress)關聯它,這個函數已經默認關聯上了一些常用的郵箱域名。

  otherAdress可以為其關聯上自定義的其他地址,調用函數時這個參數可以為空。

  一個otherAddress實例: [{domain:'@xxx.com', label: 'xxx郵箱'}, {domain: '@yyy.com', label: 'yyy郵箱'}]。

 

  一個完整調用實例:

 

<html>
<head>
    <script type="text/javascript" src="jquery-1.7.2.js"></script>
    <script type="text/javascript" src="test.js"></script>
    
    <script type="text/javascript">
        $(document).ready(function(){
            addEmailHelp('test');
        });
        
    </script>
</head>
<body>
email : <input id="test" type="text" required/>

</body>
</html>

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM