123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- function EmailAutoComplete(options) {
- this.config = {
- targetCls: '.inputElem',
- parentCls: '.parentCls',
- hiddenCls: '.hiddenCls',
- searchForm: '.jqtransformdone',
- hoverBg: 'hoverBg',
- inputValColor: 'black',
- mailArr: ["","@qq.com","@163.com","@126.com","@sina.com","@gmail.com","@foxmail.com","@sohu.com","@vip.qq.com","@hotmail.com","@163.net","@sina.com.cn","@139.com","@189.cn","@33.cn"],
- isSelectHide: true,
- callback: null
- };
- this.cache = { onlyFlag: true, currentIndex: -1, oldIndex: -1 };
- this.init(options)
- }
- EmailAutoComplete.prototype = { constructor: EmailAutoComplete, init: function(options) { this.config = $.extend(this.config, options || {});
- var self = this,
- _config = self.config,
- _cache = self.cache;
- $(_config.targetCls).each(function(index, item) { $(item).keyup(function(e) {
- var target = e.target,
- targetVal = $.trim($(this).val()),
- keycode = e.keyCode,
- elemHeight = $(this).outerHeight(),
- elemWidth = $(this).outerWidth(),
- parentNode = $(this).closest(_config.parentCls);
- console.log(targetVal);
- if(targetVal.indexOf('script')>-1){
- targetVal='';
- $(this).val("");
- return false;
- }
- $(parentNode).css({ 'position': 'relative' });
- if (targetVal == '') { $(item).attr({ 'data-html': '' });
- $(_config.hiddenCls, parentNode).val('');
- _cache.currentIndex = -1;
- _cache.oldIndex = -1;
- $(".auto-tip", parentNode) && !$(".auto-tip", parentNode).hasClass('hidden') && $(".auto-tip", parentNode).addClass('hidden');
- self._removeBg(parentNode) } else { $(item).attr({ 'data-html': targetVal });
- $(_config.hiddenCls, parentNode).val(targetVal);
- $(".auto-tip", parentNode) && $(".auto-tip", parentNode).hasClass('hidden') && $(".auto-tip", parentNode).removeClass('hidden');
- self._renderHTML({ keycode: keycode, e: e, target: target, targetVal: targetVal, height: elemHeight, width: elemWidth, parentNode: parentNode }) } }) });
- $(_config.searchForm).each(function(index, item) { $(item).keydown(function(e) {
- var keyCode = e.keyCode;
- if (keyCode == 13) {
- return false
- }
- })
- });
- $(document).click(function(e) { e.stopPropagation();
- var target = e.target,
- tagCls = _config.targetCls.replace(/^\./, '');
- if (!$(target).hasClass(tagCls)) { $('.auto-tip') && $('.auto-tip').each(function(index, item) {!$(item).hasClass('hidden') && $(item).addClass('hidden') }) } }); }, _renderHTML: function(cfg) {
- var self = this,
- _config = self.config,
- _cache = self.cache,
- curVal;
- var curIndex = self._keyCode(cfg.keycode);
- $('.auto-tip', cfg.parentNode).hasClass('hidden') && $('.auto-tip', cfg.parentNode).removeClass('hidden');
- if (curIndex > -1) { self._keyUpAndDown(cfg.targetVal, cfg.e, cfg.parentNode) } else {
- if (/@/.test(cfg.targetVal)) { curVal = cfg.targetVal.replace(/@.*/, '') } else { curVal = cfg.targetVal }
- if (_cache.onlyFlag) { $(cfg.parentNode).append('<input type="hidden" class="hiddenCls"/>');
- var wrap = '<ul class="auto-tip">';
- for (var i = 0; i < _config.mailArr.length; i++) { wrap += '<li class="p-index' + i + '">' + '<span class="output-num"></span><em class="em" data-html="' + _config.mailArr[i] + '">' + _config.mailArr[i] + '</em></li>' }
- wrap += '</ul>';
- _cache.onlyFlag = false;
- $(cfg.parentNode).append(wrap);
- $('.auto-tip', cfg.parentNode).css({ 'position': 'absolute', 'top': cfg.height, 'width': cfg.width - 2 + 'px', 'left': 0, 'border': '1px solid #ccc', 'z-index': 10000 }) }
- $('.auto-tip li', cfg.parentNode).each(function(index, item) { $('.output-num', item).html(curVal);!$('.output-num', item).hasClass(_config.inputValColor) && $('.output-num', item).addClass(_config.inputValColor);
- var emVal = $.trim($('.em', item).attr('data-html'));
- $(item).attr({ 'data-html': curVal + '' + emVal }) });
- self._accurateMate({ target: cfg.target, parentNode: cfg.parentNode });
- self._itemHover(cfg.parentNode);
- self._executeClick(cfg.parentNode) } }, _accurateMate: function(cfg) {
- var self = this,
- _config = self.config,
- _cache = self.cache;
- var curVal = $.trim($(cfg.target, cfg.parentNode).attr('data-html')),
- newArrs = [];
- if (/@/.test(curVal)) {
- var prefix = curVal.replace(/@.*/, ""),
- suffix = curVal.replace(/.*@/, "");
- $.map(_config.mailArr, function(n) {
- var reg = new RegExp(suffix);
- if (reg.test(n)) { newArrs.push(n) } });
- if (newArrs.length > 0) { $('.auto-tip', cfg.parentNode).html('');
- $(".auto-tip", cfg.parentNode) && $(".auto-tip", cfg.parentNode).hasClass('hidden') && $(".auto-tip", cfg.parentNode).removeClass('hidden');
- var html = '';
- for (var j = 0, jlen = newArrs.length; j < jlen; j++) { html += '<li class="p-index' + j + '">' + '<span class="output-num"></span><em class="em" data-html="' + newArrs[j] + '">' + newArrs[j] + '</em></li>' }
- $('.auto-tip', cfg.parentNode).html(html);
- $('.auto-tip li', cfg.parentNode).each(function(index, item) { $('.output-num', item).html(prefix);!$('.output-num', item).hasClass(_config.inputValColor) && $('.output-num', item).addClass(_config.inputValColor);
- var emVal = $.trim($('.em', item).attr('data-html'));
- $(item).attr('data-html', '');
- $(item).attr({ 'data-html': prefix + '' + emVal }) });
- _cache.currentIndex = -1;
- _cache.oldIndex = -1;
- $('.auto-tip .output-num', cfg.parentNode).html(prefix);
- self._itemHover(cfg.parentNode);
- self._executeClick(cfg.parentNode) } else { $(".auto-tip", cfg.parentNode) && !$(".auto-tip", cfg.parentNode).hasClass('hidden') && $(".auto-tip", cfg.parentNode).addClass('hidden');
- $('.auto-tip', cfg.parentNode).html('') } } }, _itemHover: function(parentNode) {
- var self = this,
- _config = self.config,
- _cache = self.cache;
- $('.auto-tip li', parentNode).hover(function(index, item) {!$(this).hasClass(_config.hoverBg) && $(this).addClass(_config.hoverBg) }, function() { $(this).hasClass(_config.hoverBg) && $(this).removeClass(_config.hoverBg) }) }, _removeBg: function(parentNode) {
- var self = this,
- _config = self.config;
- $(".auto-tip li", parentNode).each(function(index, item) { $(item).hasClass(_config.hoverBg) && $(item).removeClass(_config.hoverBg) }) }, _keyUpAndDown: function(targetVal, e, parentNode) {
- var self = this,
- _cache = self.cache,
- _config = self.config;
- if ($('.auto-tip' + ' li', parentNode) && $('.auto-tip' + ' li').length > 0) {
- var plen = $('.auto-tip' + ' li', parentNode).length,
- keyCode = e.keyCode;
- _cache.oldIndex = _cache.currentIndex;
- if (keyCode == 38) {
- if (_cache.currentIndex == -1) { _cache.currentIndex = plen - 1 } else { _cache.currentIndex = _cache.currentIndex - 1;
- if (_cache.currentIndex < 0) { _cache.currentIndex = plen - 1 } }
- if (_cache.currentIndex !== -1) {!$('.auto-tip .p-index' + _cache.currentIndex, parentNode).hasClass(_config.hoverBg) && $('.auto-tip .p-index' + _cache.currentIndex, parentNode).addClass(_config.hoverBg).siblings().removeClass(_config.hoverBg);
- var curAttr = $('.auto-tip' + ' .p-index' + _cache.currentIndex, parentNode).attr('data-html');
- $(_config.targetCls, parentNode).val(curAttr);
- $(_config.hiddenCls, parentNode).val(curAttr) } } else if (keyCode == 40) {
- if (_cache.currentIndex == plen - 1) { _cache.currentIndex = 0 } else { _cache.currentIndex++;
- if (_cache.currentIndex > plen - 1) { _cache.currentIndex = 0 } }
- if (_cache.currentIndex !== -1) {!$('.auto-tip .p-index' + _cache.currentIndex, parentNode).hasClass(_config.hoverBg) && $('.auto-tip .p-index' + _cache.currentIndex, parentNode).addClass(_config.hoverBg).siblings().removeClass(_config.hoverBg);
- var curAttr = $('.auto-tip' + ' .p-index' + _cache.currentIndex, parentNode).attr('data-html');
- $(_config.targetCls, parentNode).val(curAttr);
- $(_config.hiddenCls, parentNode).val(curAttr) } } else if (keyCode == 13) {
- var curVal = $('.auto-tip' + ' .p-index' + _cache.oldIndex, parentNode).attr('data-html');
- $(_config.targetCls, parentNode).val(curVal);
- $(_config.hiddenCls, parentNode).val(curVal);
- if (_config.isSelectHide) {!$(".auto-tip", parentNode).hasClass('hidden') && $(".auto-tip", parentNode).addClass('hidden') }
- _config.callback && $.isFunction(_config.callback) && _config.callback();
- _cache.currentIndex = -1;
- _cache.oldIndex = -1 } } }, _keyCode: function(code) {
- var arrs = ['17', '18', '38', '40', '37', '39', '33', '34', '35', '46', '36', '13', '45', '44', '145', '19', '20', '9'];
- for (var i = 0, ilen = arrs.length; i < ilen; i++) {
- if (code == arrs[i]) {
- return i } }
- return -1 }, _executeClick: function(parentNode) {
- var _self = this,
- _config = _self.config;
- $('.auto-tip' + ' li', parentNode).unbind('click');
- $('.auto-tip' + ' li', parentNode).bind('click', function(e) {
- var dataAttr = $(this).attr('data-html');
- $(_config.targetCls, parentNode).val(dataAttr);
- if (_config.isSelectHide) {!$(".auto-tip", parentNode).hasClass('hidden') && $(".auto-tip", parentNode).addClass('hidden') }
- $(_config.hiddenCls, parentNode).val(dataAttr);
- _config.callback && $.isFunction(_config.callback) && _config.callback() }) } };
- $(function() { new EmailAutoComplete({}) });
|