/** * 此文件的头部注释 */ /*global jQuery: false */ (function ($) { 'use strict'; var emailbox = function (selector, setting) { // UNDONE [2014-4-17] [] 可以var emailbox = pe.ui.EmailBox = function(),这样写直观些 this.init(selector, setting); }, defaultSetting = { address: [ 'gmail.com', 'hotmail.com', 'yahoo.com', 'qq.com', 'sina.com', '163.com', '126.com', 'sina.cn', 'sohu.com' ], item: '
  • ', icon: '', inputUserName: '' }; emailbox.prototype = { setting: null, box: null, keyer: null, init: function (selector, setting) { var self = this, $box = this.box = $(selector), $keyer = this.keyer = $box.find('input[type=text]'), $menu = this.menu = $box.find('.dropdown-menu'); this.setting = $.extend({}, defaultSetting, setting); $.each(this.setting.address, function (index, val) { var $item = self.bulidItem(val); $menu.append($item); }); $keyer.on('input keydown ', function (event) { var curitem; if (event.keyCode == 13) { curitem = $menu.find("li[data-select='selected']").first(); $menu.find('li').attr('data-select', '').removeClass('selected'); $menu.hide(); self.select(curitem); event.stopPropagation(); return false; } var key = $keyer.val(); if (key.indexOf('@') > -1) { key = key.substr(0, key.indexOf('@')); } if (key) { self.items() .each(function () { self.replaceUserName(key, $(this)); }); $menu.show(); } else { $menu.hide(); } if (event.keyCode == 40) { if ($menu.find("li[data-select='selected']").first().next("li").length == 0) { curitem = $menu.find("li:first"); } else { curitem = $menu.find("li[data-select='selected']").first().next("li"); } self.selectItem(curitem); event.stopPropagation(); } if (event.keyCode == 38) { if ($menu.find("li[data-select='selected']").first().prev("li").length == 0) { curitem = $menu.find("li:last"); } else { curitem = $menu.find("li[data-select='selected']").first().prev("li"); } self.selectItem(curitem); event.stopPropagation(); } }) .on('click', function (e) { e.stopPropagation(); }); $('html') .on('click', function () { $menu.hide(); }); }, disable: function () { this.keyer.attr("disabled", "disabled"); }, enable: function () { this.keyer.removeAttr("disabled"); }, bulidItem: function (emailAddress) { var $item = $(this.setting.item).find('a').text('@' + emailAddress), $name = $(this.setting.inputUserName).prependTo($item), $icon = $(this.setting.icon).prependTo($item), self = this; $item.click(function () { var $item = $(this).parent(); self.select($item); self.menu.hide(); self.keyer.blur(); return false; }); return $item.parent(); }, items: function () { return this.box.find('.emailbox-item'); }, replaceUserName: function (val, item) { item.find('.emailbox-username').text(val); }, select: function (item) { this.keyer.val(item.find('a').text()); }, selectItem: function (item) { this.menu.find('li').attr('data-select', '').removeClass('selected'); item.attr('data-select', 'selected').addClass('selected'); } }; pe.ui.EmailBox = emailbox; }(jQuery));