《锋利的jquery一书》中的用jquery实现文本框得到失去焦点的效果,效果如图:
结构是一个简单的表单,html里用到了fieldset及legend这两个表现来实现半外边框的效果。fieldset里分别放了三个div来放三个表单,名称用了label属性,后面用了input及textarea,代码如下:
<form action="" method="post" id="regForm">jquery代码主要是给表单的元素添加得到焦点focus及失去焦点blur这两个事件。注意这里选取表单的所有元素用的是$(":input")。注意jquery选择器里:表示是什么的,[ ]表示有什么的,如:比如 $("tr:first") 表示的是tr是first的是哪些,$(":input") 是input的是那些,$("div[id]") 表示的是有id属性的div有哪些。
<fieldset>
<legend>个人基本信息</legend>
<div>
<label for="username">名称:</label>
<input id="username" type="text" value="名称" />
</div>
<div>
<label for="pass">密码:</label>
<input id="pass" type="password" value="密码" />
</div>
<div>
<label for="msg">详细信息:</label>
<textarea id="msg" rows="2" cols="20">详细信息</textarea>
</div>
</fieldset>
</form>
而这里的$(":input") 返回form中的所有表单对象,包括textarea、select、button等。在focus及blur事件里分别添加及移除相应的得到或失去焦点的效果。在得到焦点时判断当前表单元素的值是否等于默认值,如果等于,则让它为空;而在失去焦点时判断当前表单元素的值是否为空,如果为空,则给它赋默认值。这里学习了jquery如何取得表单的值及如何为其赋值的方法,这里还结合了JS的方法this.defaultValue,表单的默认值,代码如下:
$(":input").focus(function(){
$(this).addClass("focus");
if($(this).val() ==this.defaultValue){
$(this).val("");
}
}).blur(function(){
$(this).removeClass("focus");
if ($(this).val() == '') {
$(this).val(this.defaultValue);
}
});