html5給文本框實現email域名自動完成效果
來源:程序員人生 發布時間:2014-04-27 08:42:05 閱讀次數:3260次
產品反饋用戶總是輸錯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郵箱'}]。
一個完整調用實例:
提示:可修改后代碼再運行!
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈