用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - javascript代码库

jQuery 输入邮箱地址时自动提示 

2012-10-18 作者: 程序猿style举报

[javascript]代码库

( function ( $ )
{
	$.fn.mailAutoComplete = function ( options )
	{
		var defaults =
		{
boxClass: "mailListBox", //外部box样式
listClass: "mailListDefault", //默认的列表样式
focusClass: "mailListFocus", //列表选样式中
markCalss: "mailListHlignt", //高亮样式
			zIndex: 1,
autoClass:
			true, //是否使用插件自带class样式
mailArr:
			["qq.com","gmail.com","126.com","163.com","hotmail.com","yahoo.com","yahoo.com.cn","live.com","sohu.com","sina.com"], //邮件数组
textHint:
			false, //文字提示的自动显示与隐藏
hintText: ""
			,
focusColor: "#333"
			,
blurColor: "#999"
		};
		var settings = $.extend ( {}, defaults, options || {} );

		//页面装载CSS样式
		if ( settings.autoClass && $ ( "#mailListAppendCss" ).size() === 0 )
		{
			$ ( '' ).appendTo ( $ ( "head" ) );
		}
		var cb = settings.boxClass, cl = settings.listClass, cf = settings.focusClass, cm = settings.markCalss; //插件的class变量
		var z = settings.zIndex, newArr = mailArr = settings.mailArr, hint = settings.textHint, text = settings.hintText, fc = settings.focusColor, bc = settings.blurColor;
		//创建邮件内部列表内容
		$.createHtml = function ( str, arr, cur )
		{
			var mailHtml = "";
			if ( $.isArray ( arr ) )
			{
				$.each ( arr, function ( i, n )
				{
					if ( i === cur )
					{
						mailHtml += '
						            '+str+'@'+arr[i]+'
						            ';
					}
					else
					{
						mailHtml += '
						            '+str+'@'+arr[i]+'
						            ';
					}
				} );
			}
			return mailHtml;
		};
		//一些全局变量
		var index = -1, s;
		$ ( this ).each ( function()
		{
			var that = $ ( this ), i = $ ( ".justForJs" ).size();
			if ( i > 0 )   //只绑定一个文本框
			{
				return;
			}
			var w = that.outerWidth(), h = that.outerHeight(); //获取当前对象(即文本框)的宽高
			//样式的初始化
			that.wrap ( '' )
			.before ( '
			          ' );
			var x = $ ( "#mailListBox_" + i ), liveValue; //列表框对象
			that.focus ( function()
			{
				//父标签的层级
				$ ( this ).css ( "color", fc ).parent().css ( "z-index", z );
				//提示文字的显示与隐藏
				if ( hint && text )
				{
					var focus_v = $.trim ( $ ( this ).val() );
					if ( focus_v === text )
					{
						$ ( this ).val ( "" );
					}
				}
				//键盘事件
				$ ( this ).keyup ( function ( e )
				{
					s = v = $.trim ( $ ( this ).val() );
					if ( /@/.test ( v ) )
					{
						s = v.replace ( /@.*/, "" );
					}
					if ( v.length > 0 )
					{
						//如果按键是上下键
						if ( e.keyCode === 38 )
						{
							//向上
							if ( index <= 0 )
							{
								index = newArr.length;
							}
							index--;
						}
						else if ( e.keyCode === 40 )
						{
							//向下
							if ( index >= newArr.length - 1 )
							{
								index = -1;
							}
							index++;
						}
						else if ( e.keyCode === 13 )
						{
							//回车
							if ( index > -1 && index < newArr.length )
							{
								//如果当前有激活列表
								$ ( this ).val ( $ ( "#mailList_"+index ).text() );
							}
						}
						else
						{
							if ( /@/.test ( v ) )
							{
								index = -1;
								//获得@后面的值
								//s = v.replace(/@.*/, "");
								//创建新匹配数组
								var site = v.replace ( /.*@/, "" );
								newArr = $.map ( mailArr, function ( n )
								{
									var reg = new RegExp ( site );
									if ( reg.test ( n ) )
									{
										return n;
									}
								} );
							}
							else
							{
								newArr = mailArr;
							}
						}
						x.html ( $.createHtml ( s, newArr, index ) ).css ( "left", 0 );
						if ( e.keyCode === 13 )
						{
							//回车
							if ( index > -1 && index < newArr.length )
							{
								//如果当前有激活列表
								x.css ( "left", "-6000px" );
							}
						}
					}
					else
					{
						x.css ( "left", "-6000px" );
					}
				} ).blur ( function()
				{
					if ( hint && text )
					{
						var blur_v = $.trim ( $ ( this ).val() );
						if ( blur_v === "" )
						{
							$ ( this ).val ( text );
						}
					}
					$ ( this ).css ( "color", bc ).unbind ( "keyup" ).parent().css ( "z-index",0 );
					x.css ( "left", "-6000px" );

				} );
				//鼠标经过列表项事件
				//鼠标经过
				$ ( ".mailHover" ).live ( "mouseover", function()
				{
					index = Number ( $ ( this ).attr ( "id" ).split ( "_" ) [1] );
					liveValue = $ ( "#mailList_"+index ).text();
					x.children ( "." + cf ).removeClass ( cf ).addClass ( cl );
					$ ( this ).addClass ( cf ).removeClass ( cl );
				} );
			} );
			x.bind ( "mousedown", function()
			{
				that.val ( liveValue );
			} );
		} );
	};

} ) ( jQuery );


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...