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{width: 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;width: 90px;height: 30px;line-height: 30px; } #login fieldset p input {display: block;float:left;border: 1px solid #999;width: 250px;height: 30px;line-height: 30px; } #login fieldset p input.code{width: 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;width: 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;width: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>
十、老师辛苦了!