论坛首页 Web前端技术论坛

为输入控件设置提示文本(jquery实现)

浏览 4768 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-10-28  

    在需要用户输入信息时,在form中的input/textarea等文本输入控件都会在前头有一个文本提示应该输入什么信息,如果留给form的页面位置太少,那么留给输入框的位置就更少了.有很多网站是把这些提示信息显示在输入控件上,当用鼠标点击这些文本输入控件的时候再清空,等待用户输入.参考了一些别人写的东西,自己做了一个示例.

    html中的body部分:

<body>
	<form action="#" method="post" id="form">
		<p>
			<label for="username">在此输入姓名</label>
			<input type="Text" name="username" id="username" value="" />
		</p>
	
		<p>
			<label for="password">在此输入验证码</label>
			<input type="text" name="password" id="password" value="" />
		</p>
	
		<p>
			<label for="something">输入一些东西吧</label>
			<textarea name="something" id="something" cols="50" rows="4"></textarea>
		</p>
		<input type="button" onclick="javascript:beforeSubmit();" value="提交前的处理" />
	</form>
</body>

 input对象和textarea对象都有一个label与之对应,用于设置默认的提示信息.页面初始化时,将label中的信息提取出来显示在对应的对象上,然后将该label隐藏.当用鼠标点击输入对象时,将默认信息清空.对象失去焦点时检查用户是否有数据输入,如果没有数据则恢复默认提示信息.下面是对应的javascript代码:

$(document).ready(function() {
			labelOnTip($("#form"));	//选择需要处理的页面部分
		});
		
		function labelOnTip(container) {
			container.find("label").each(function() {	//循环container中的每个label
				object = document.getElementById($(this).attr("for"));
				if($(object).attr("type") == "text" || object.tagName.toLowerCase() == "textarea") {
					var text = $(this).text();	//取出label中的值用于恢复默认值
					$(this).css("display","none");	//设置label不可见
					$(object).val(text).addClass("inactive")	//设置输入控件的内容为默认值,设置CSS样式
						.removeClass("active onfocuse");
					//输入控件获得焦点时设置CSS样式,同时将value设为空接收输入
					$(object).focus(function() {
						$(this).addClass("onfocuse")
							.removeClass("active inactive");
						if($(this).val() == text) {
							$(this).val("");
						}
					});
					//输入控件焦点释放时,设置CSS样式,检查输入内容是否为空
					$(object).blur(function() {
						//如果输入内容为空恢复label设置的默认值
						if($(this).val() == "") {
							$(this).val(text);
							$(this).addClass("inactive")
								.removeClass("active onfocuse");
						} else {	
							$(this).addClass("active")
								.removeClass("inactive onfocuse");
						}
					});
				}
			});
		}

 这样当用户提交该form时,没有输入数据的对象的值是默认值.因此在提交form之前需要对这些输入控件做一些处理.下面是一个简单的处理方法,在提交之前检查输入控件的内容是否同对应label的值相同,若相同则将输入控件中默认数据清空:

function beforeSubmit() {
		//在表单提交之前,要将没有输入数值的控件的value属性置为空,
		//防止提交对应label中设置的默认显示内容.
		$("#form").find("label").each(function() {	//循环form中的每个label
			object = document.getElementById($(this).attr("for"));
			if($(object).attr("type") == "text" || object.tagName.toLowerCase() == "textarea") {
				var text = $(this).text();	//取出label中的值用于恢复默认值
				if($(object).val() == text) {
					$(object).val("");	//value置空
				}
				alert($(object).attr("name") + ":" + $(object).val());
			}
		});
	}
 

 

论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics