2017年6月16号 星期五 空气质量:中度污染~轻度污染
内容:jQuery:remove,bind,attr,on和live,同辈和父辈节点的操作,
keyup/keypress/keydown,focus-blur应用,表单事件/键盘事件,
显示隐藏、淡入淡出,slideup和slidedown
备注:代课老师李老师
内容是自己对比着老师博客找的
一、remove和detach的区别
老师代码:
<!DOCTYPE HTML>
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<script type="text/javascript" src="js/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
$(function() {
var $first=$("#first");
//获取点击事件
$first.click(function(){
alert("first");
})
//清空节点 empty $first.empty();
//删除节点 $first.remove();
$first.detach(); // 删除节点但是 保留了 事件
$first.prependTo("body");
});
</script>
</head>
<body>
<div id="main">
main
<div id="first">first</div>
</div>
</body>
</html>
二、bind(绑定和解绑)
老师代码1:
<!DOCTYPE HTML>
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<script type="text/javascript" src="js/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
$(function() {
/* $("input").mouseover(function(){
alert("mouseover");
}) */
//同时绑定多个事件
$("input").bind(
{
mouseover:function(){
alert("mouseover");
},
mouseout:function(){
alert("mouseout");
},
click:function(){
alert("click");
}
})
});
</script>
</head>
<body>
<input type="button" value="bind">
</body>
</html>
老师代码2:
<script type="text/javascript" src="js/jquery-1.12.4.js"></script>
<script type="text/javascript">
$(function() {
//给button按钮绑定事件
$("button").bind(
{
mouseover:mb,
mouseout:ob,
click:cb
}
);
//获取解除绑定的按钮
$("[type='button']").click(function(){
// $("button").unbind("mouseover");解除一个
// $("button").unbind("mouseover").unbind("click");解除两个
$("button").unbind("mouseover click");//解除两个 多个使用空格隔开
})
});
function mb(){
$("button").css("color","red");
}
function ob(){
$("button").css("color","blue");
}
function cb(){
alert("大家辛苦了!");
}
</script>
</head>
<body>
<form action="#" method="get">
用户名:<input type="text" name="userName" placeholder="请输入用户名">
密码:<input type="password" name="pwd" placeholder="请输入密码">
<button type="submit">登录</button>
<button type="button">解除绑定</button>
</form>
</body>
</html>
三、attr(设置或返回被选元素的属性值)
老师代码:
<!DOCTYPE HTML>
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<script type="text/javascript" src="js/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
$(function() {
$("img").click(function(){
alert($(this).attr("src")); //获取指定的属性值
// $(this).attr("title","这是一个可爱的小猫咪!"); 增加单个属性
$(this).attr({"title":"斗地主","alt":"大家一起斗地主!","src":"images/1.gif"}); //json格式设置多个属性
alert($(this).attr("src"));
//removeAttr
$(this).removeAttr("src");
})
});
</script>
</head>
<body>
<img src="images/cat.jpg"/>
</body>
</html>
四、on和live区别
老师代码:
<!DOCTYPE HTML>
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<script type="text/javascript" src="js/jquery-1.8.3.min.js" ></script>
<style type="text/css" >
*{
font-size:12px;
}
</style>
<script type="text/javascript">
$(document).ready(function(){
//删除当前行商品元素 这种 只能删除 之前页面存在的元素
/* $(".del").click(function(){
$(this).parent().parent().remove();
}) */
$(document).on("click",".del",function(){
$(this).parent().parent().remove();
})
//1.9之后的版本 废除了 此方法
/* $(".del").live("click",function(){//可以删除新增元素和之前存在的元素
$(this).parent().parent().remove();
}) */
//新增一行
$(".add").click(function(){
//创建节点
var $newRow= $("<tr>"
+" <td> "
+" <input name='' type='checkbox' value=''/> "
+" </td> "
+" <td> "
+" <img src='images/sang.gif' class='products'/><a href='#'>天堂雨伞</a></td><td>¥32.9元 "
+" </td> "
+" <td> "
+" <img src='images/subtraction.gif' width='20' height='20'/> "
+" <input type='text' class='quantity' value='1'/> "
+" <img src='images/add.gif' width='20' height='20'/> "
+" </td> "
+" <td> "
+" <a href='#' class='del'>删除</a> "
+" </td> "
+"</tr> ");
//在table中新增节点
$("table").append($newRow);
})
})
</script>
</head>
<body>
<table border="1" cellpadding="0" cellspacing="0">
<tr>
<th><input type='checkbox' />全选</th>
<th>商品信息</th>
<th>宜美惠价</th>
<th>数量</th>
<th>操作</th>
</tr>
<tr>
<td>
<input name="" type="checkbox" value=""/>
</td>
<td>
<img src="images/sang.gif" class="products"/><a href="#">天堂雨伞</a></td><td>¥32.9元
</td>
<td>
<img src="images/subtraction.gif" width="20" height="20"/>
<input type="text" class="quantity" value="1"/>
<img src="images/add.gif" width="20" height="20"/>
</td>
<td>
<a href="#" class="del">删除</a>
</td>
</tr>
<tr>
<td>
<input name="" type="checkbox" value=""/>
</td>
<td>
<img src="images/iphone.gif" class="products"/><a href="#">苹果手机iphone5</a></td><td>¥3339元
</td>
<td>
<img src="images/subtraction.gif" width="20" height="20"/>
<input type="text" class="quantity" value="1"/>
<img src="images/add.gif" width="20" height="20"/>
</td>
<td>
<a href="#" class="del">删除</a>
</td>
</tr>
</table>
<a href="#" class="add">添加</a>
</body>
</html>
五、同辈和父辈节点的操作
老师代码:
<!DOCTYPE HTML>
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<script type="text/javascript" src="js/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
$(function() {
//获取body的子元素个数 alert("body的子元素个数:"+$("body").children().length);
//获取下个同辈元素 $("#first1").next().css("color","red");
//获取上个同辈元素 $("#first3").prev().css("color","red");
//获取上下所有的同辈元素 $("#first2").siblings().css("color","red");
//获取父辈元素 $("#second1").parent().parent().css("color","red");
//获取祖先元素 parents()查询的boby
$("#third1").parents().css("color","red");
});
</script>
</head>
<body>
body
<div id="main">
main
<div id="first1">
first1
<div id="second1">
second1
<div id="third1">
third1
</div>
</div>
</div>
<div id="first2">
first2
<div id="second2">
second2
</div>
</div>
<div id="first3">
first3
<div id="second3">
second3
</div>
</div>
</div>
</body>
</html>
六、keyup/keypress/keydown(键盘事件)
未找到老师代码,参考资料如下:
参考资料出自:http://www.cnblogs.com/leolai/archive/2012/08/01/2618386.html
用户在使用键盘时会触发键盘事件。目前,对键盘事件的支持主要遵循的是DOM0级。
在英文输入法下,所有浏览器都遵循以下三个事件:
- keydown: 当用户按下任意键时触发,而且按住不放的话,会重复触发此事件。
- keypress: 当用户按下字符键时触发,而且按住不放的话,会重复触发此事件。按下Esc键也会触发这个事件,Safari3.1之前的版本按下非字符键时也触发。
- keyup: 当用户释放键时触发。
在中文输入法下,浏览器之间则表现得不一致,主要情况如下:
- IE,Chrome,Safari:触发keydown和keyup, 不触发keypress。
- Firefox:首次按下按键时触发keydown,不触发keypress。在停止输入法并改变文本框内容(如按下回车或者空格键)后会触发keyup。
- Opera:keydown, keypress和keyup都不触发。
- PS : 只有在触发keyup事件才能获得修改后的文本值。
所有元素都支持以上三个事件,一般情况下只有在文本框时才经常用到。
键盘事件的触发过程具体是这样的: 在用户按下键盘上的一个字符键时,首先会触发keydown事件,然后是keypress事件,最后是keyup事件。其中,keydown和keypress事件是在文本框发生变化之前被触发;而keyup在文本框发生变化之后被触发。如果用户按下一个键不放,就会重复触发keydown和keypress事件。在用户按下一个非字符键时,首先触发keydown事件,然后就是keyup事件。如果用户按下一个键不放,就会重复触发keydown。
当我们监听这三个事件时,最想得到的数据信息就是键码(keyCode)和字符编码(charCode)了。
键码(keyCode)
在发生keydown和keyup事件时,event对象的keyCode属性会包含一个代码,keyCode属性的值就是小写字母或数字对应的ASCII码(点击这里查看ASCII码表),在程序中可通过如下代码来获得keyCode值:
//EventUtil是一个封装的对象,用来处理跨浏览器事件
var textbox = document.getElementById('myText');
EventUtil.addHandler(textbox,'keydown',function(event){
event = event || window.event;
alert(event.keyCode);
});
以下是keydown和keypress事件存在的一些特殊情况:
- 在FF和Opera中,按分号键时keyCode值为59,但IE,Chrome和Safari则返回186
- 在Safari3之前的版本中,上、下、左、右箭头和上翻(PageUp)、下翻(PageDown)键返回大于63000的值。
字符编码(charCode)
在发生keypress事件时,FF、Chrome和Safari的event对象都支持一个charCode属性,charCode属性的值就是按下的字符键对应的ASCII编码,这个属性在按下非字符键或发生keydown和keyup事件时值为0;IE和Opera则是在keyCode中保存字符键的ASCII编码。所以,要想跨浏览器获得字符编码,代码如下:
//获取字符编码
var getCharCode = function(event){
var charcode = event.charCode;
if(typeof charcode == "number" && charcode != 0){
return charcode;
}else{
//在中文输入法下 keyCode == 229 || keyCode == 197(Opera)
return event.keyCode;
}
};
这个方法首先检查charCode属性是否包含数值(在不支持这个属性的浏览器中,值为undefined),在判断是否等于0(兼容keydown和keyup事件),如果条件成立,则返回改值,否则返回keyCode的值。之前的例子获取字符编码如下:
var textbox = document.getElementById('myText');
EventUtil.addHandler(textbox,'keydown',function(event){
event = event || window.event;
alert(getCharCode(event));
});
在得到了字符编码后,可以使用String.fromCharCode()将其转换为实际的字符。
键盘事件的应用
1、 过滤输入——屏蔽某些字符的输入
达到的效果:只能输入数字,输入其他字符没有反应。不屏蔽辅助输入的按键,如退格键,方向键,复制,粘贴等。
原理很简单:在文本框修改前,获取字符编码,判断合理性,不成立则阻止键盘的默认事件。看起来很简单,但由于浏览器的兼容问题,实现起来还是有点难度。代码如下:
var handler= function(e){
e = e || window.event;
var charcode = typeof e.charCode == 'number' ? e.charCode : e.keyCode;
var re = /d/;
//FF和safari3.1以前版本会对方向键、退格键、删除键触发keypress事件 charcode > 9 可修复此Bug
//!e.ctrlKey 不屏蔽Ctrl+C,Ctrl+V
if(!re.test(String.fromCharCode(charcode)) && charcode > 9 && !e.ctrlKey){
//阻止默认事件
if(e.preventDefault){
e.preventDefault();
}else{
e.returnValue = false;
}
}
};
EventUtil.addHandler(textbox,'keypress',handler);
//监听粘贴事件
EventUtil.addHandler(textbox,'paste',function(e){
e = e || window.event;
var clipboardData = e.clipboardData || window.clipboardData;
if(!/^d*$/.test(clipboardData.getData('text'))){
//阻止默认事件
if(e.preventDefault){
e.preventDefault();
}else{
e.returnValue = false;
}
}
});
在这个例子的基础上加以修改和调整,就可以应用于放过或屏蔽任何输入文本框的字符。
很遗憾,还有一个bug未能解决,就是在中文输入法时keypress事件失效问题。
针对中文输入法的Bug,目前找到的解决办法是:在文本框加入属性style="ime-mode:disabled" IE和FF下可禁用输入法;在Chrome,Safar下可为文本框添加keydown事件,判断event.keyCode是否等于299,是的话就阻止keydown默认事件,这种方法对IE也有效。而对于Opera则没有找到解决办法。
七、表单事件应用
老师代码:
<!DOCTYPE html >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>表单事件</title>
<style type="text/css">
#login{
400px;
height: 250px;
background-color: #f2f2f2;
border:1px solid #DDDDDD;
padding: 5px;
}
#login fieldset {
border: none;
margin-top: 10px;
}
#login fieldset legend{
font-weight: bold;
}
#login fieldset p{
display: block;
height: 30px;
}
#login fieldset p label {
display: block;
float:left;
text-align: right;
font-size: 12px;
90px;
height: 30px;
line-height: 30px;
}
#login fieldset p input {
display: block;
float:left;
border: 1px solid #999;
250px;
height: 30px;
line-height: 30px;
}
#login fieldset p input.code{
60px;
}
#login fieldset p img{
margin-left: 10px;
}
#login fieldset p a{
color: #057BD2;
font-size: 12px;
text-decoration: none;
margin: 10px;
}
#login fieldset p input.btn{
background: url("./images/login.gif") no-repeat;
98px;
height: 32px;
margin-left: 60px;
color: #ffffff;
cursor: pointer;
}
#login fieldset p input.input_focus{
background-color: #BEE7FC;
}
</style>
<script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
//鼠标事件 click事件提交表单
$(".btn").click(function(){
alert("表单提交");
$("#login").submit();
});
//鼠标移至按钮,按钮字体变粗。移出按钮则字体为正常字体
$(".btn").hover(function(){
$(this).css("font-weight","bold");
},function(){
$(this).css("font-weight","normal");
});
//用户名输入框的焦点事件
$("[name='member']").focus(function(){
$(this).addClass("input_focus");
});
$("[name='member']").blur(function(){
$(this).removeClass("input_focus");
});
//键盘事件,敲击回车键进行表单提交,keyCode的数值代表不同的键盘按键
$(document).keypress(function(key){
if(key.keyCode==13){
$("#login").submit();
}
});
});
</script>
</head>
<body>
<form id="login">
<fieldset>
<legend>用户登录</legend>
<p>
<label>用户名:</label>
<input name="member" type="text" />
</p>
<p>
<label>密码:</label>
<input name="password" type="text" />
</p>
<p>
<label>验证码:</label>
<input name="code" type="text" class="code" />
<img src="images/code.gif" width="80" height="30" /><a href="#">换一张</a>
</p>
<p>
<input name="" type="button" class="btn" value="登录" />
<a href="#">注册</a><span>|</span><a href="#">忘记密码?</a>
</p>
</fieldset>
</form>
</body>
</html>
八、显示隐藏、淡入淡出
老师代码:
<!DOCTYPE HTML>
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>
<script type="text/javascript">
$(function() {
//显示速度 有 slow normal fast 还可以是具体的时间 单位是 毫秒
$("#showImg").click(function(){
//$("img").show("slow");
$("img").fadeIn(3000);
})
$("#hideImg").click(function(){
// $("img").hide("fast");
$("img").fadeOut(3000);
})
});
</script>
</head>
<body>
<input type="button" id="showImg" value="显示">
<input type="button" id="hideImg" value="隐藏">
<img src="images/cat.jpg" style="opacity:1"/>
</body>
</html>
九、slideup和slidedown
老师代码:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<script type="text/javascript" src="js/jquery-1.10.2.min.js"></script>
<style type="text/css" >
ul{
list-style:none;
padding:5px;
210px;
border:1px solid red;
}
a{
text-decoration:none;
line-height: 30px;
}
.menu_style li{
border-bottom:1px solid #666;
}
</style>
<script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>
<script type="text/javascript">
$(function() {
//让li下标大于5的显示和隐藏 toggle 也可以让元素 显示或者隐藏
/* $("input").click(function(){
$("li:gt(5):not(:last)").toggle();
}) */
//动态改变高度
$("input").toggle(function(){
$("li:gt(5):not(:last)").slideUp("slow");
},function(){
$("li:gt(5):not(:last)").slideDown("slow");
});
});
</script>
</head>
<body>
<div id="menu" class="menu_style">
<ul>
<li><a href="#">手机通讯、数码电器</a></li>
<li><a href="#">食品饮料、酒水、果蔬</a></li>
<li><a href="#">进口食品、进口牛奶</a></li>
<li><a href="#">美容化妆、个人护理</a></li>
<li><a href="#">母婴用品、个人护理</a></li>
<li><a href="#">厨卫清洁、纸、清洁剂</a></li>
<li id="menu_07" class="element_hide"><a href="#">家居家纺、锅具餐具</a></li>
<li id="menu_08" class="element_hide"><a href="#">生活电器、汽车生活</a></li>
<li id="menu_09" class="element_hide"><a href="#">电脑、外设、办公用品</a></li>
<li class="btn">
<input name="more_btn" type="button" value="展开或关闭菜单项" />
</li>
</ul>
</div>
</body>
</html>
十、老师辛苦了!

