锋利的jQuery之事件
jQuery中的事件和动画
JavaScript和HTML之间的交互是通过用户和浏览器操作页面时引发的事件来处理的。当文档或者它的某些元素发生某些变化或操作时,浏览器会自动生成一个事件。例如:当浏览器装载完成一个文档后,会生成事件;当用户单击某个按钮时也会生成事件。虽然使用javascript事件可以完成这些交互,但jQuery增加并扩展了基本的事件处理机制。jQuery不仅提供事件的处理语法,而且极大的增强了事件处理能力。下面我们就一起探讨探讨关于jQuery中的事件与动画。
加载DOM
javaScript代码中,通常使用window.onload方法。在jQuery中,使用是$(function{}方法。后者是事件模块中最重要的一个函数,可以极大的提高Web应用程序的响应速度。
执行机制
javascript中的执行机制为加载网页中所有的任何元素,jQuery中的执行机制为加载HTML标签。
事件绑定
在文档装载完成后,如果打算为元素绑定事件来完成某些操作,则可以使用bind()方法来对匹配元素进行特定的事件的绑定,bind()方法的调用格式为:
bind (type,[data],fn);
bind()方法有3个参数:
1.事件类型:类型包括如下blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseenter...当然也可以自定义名称。
2.可选参数:作为event.data属性值传递给事件对象的额外数据对象。
3.绑定需要处理的函数。
bind()简单示例
//我们假设网页中有一个FAQ,单击“标题”链接显示内容
<div id = "panel">
<h3 class="head">什么是jQuery?</h3>
<div class="content">
请去查找相关资料
</div>
</div>
//引入样式后我们使用bind( )方法
$(function(){
$("#panle h5.head").bind("click",function(){
$(this).next().show();
})
})
//需要效果图的朋友请自己copy到代码中查看我们继续补充一个加强版的
//如果内容是显示则隐藏,如隐藏则显示
$(function(){
$("#panle h5.head").bind("click",function(){
          if($(this).next().is(":visible")){
           $(this).next().hide();
       }else{
           $(this).next().show();
      }
   })
})
合成事件
jQuery有两个合成事件-----------hover()方法与toggle()方法。它俩都属与jQuery自定义的方法。
1.hover()方法
//语法结构为:
hover(enter,leave);
/*hover()方法用于模拟光标悬停事件。当光标移动到元素上时,会触发第一个函数(enter);当光标移出时会出发第2个函数(leave)。
我们将上面的例子改使用hover方法,代码如下:
*/
$(function(){
$("#panel h5.head").hover(function(){
$(this).next().show();
}).function(){
$(this).next().hide();
}
});
2.toggle()方法
//语法结构为:
toggle(fn1,fn2,....fnN);
/*
toggle()方法用于模拟鼠标连续单击事件,第一次单击触发第一个函数,第二次则是第二个直到最后一个函数调用完成,随后的每次单击都会重复对这几个函数轮番调用。
*/
//我们将上面的例子转换为toggle()方法
$(function(){
$("#panel h5.head").toggle(function(){
$(this).next().show();
}).function(){
$(this).next().hide();
}
});
//我们可以明显的发现使用toggle()方法不仅实现同样的效果,同样也简化了代码
事件冒泡
在页面上可以有多个事件,也可以多个元素响应同一个事件。如页面中有多个元素,且其中几个元素被嵌套而且都被绑定了单击事件,用户想要单击某个元素的同时就会触发其他元素的单击事件,这就是事件冒泡。如想避免时间冒泡引发的问题就要对时间的作用范围进行限制。为了解决此问题就需了解一下内容:
事件对象
由于IE-DOM和标准DOM实现事件对象的方法各不相同。导致在不同的浏览器中获取事件对象变得比较困难。针对这个问题,jQuery进行了必要的扩展和封装,从而使得在任何浏览器中都能很轻松地获取事件对象以及事件对象的一些属性。
//在程序中使用事件对象非常简单,是需要为函数添加一个参数,jQuery代码如下:
$("element").bind("click".function(event){
//...
});
/*单击element元素时事件对象就被创建了。这个事件对象只有事件处理函数才能访问到。事件处理函数执行完毕后,事件对象就被销毁*/
/*停止事件冒泡:停止事件冒泡可以阻止事件中其他对象的事件处理函数执行。jQuery中提供了stopPropagation()方法来停止事件冒泡*/ $('sapn').bind("click",function(event){
var txt = $(#msg).html()+"<p>内层span元素被单击</p>";
$("#msg").html(txt);
event.stopPropagation(); //停止事件冒泡
});
/*这样当单击<span>元素时候,只会触发该元素上的click事件,而不会触发其他元素的click事件*/
阻止默认行为
网页中的元素有自己默认的行为,例如,单击超链接会跳转,单击提交按钮会表单提交,有时候我们需要进行阻止元素的默认行为。在jQuery中,提供了preventDefault()方法来阻止元素的默认行为。举一个例子:在项目中经常需要验证表单,在单击提交时,验证表单内容,当表单不符合提交条件时我们就要阻止表单的提交(默认行为)。
<script type="text/javascript">
$(function(){
$("#sub").bind("click".function(event){
var username =$("#username").val(); //获取元素的值
if(username==""){ //判断是否为空
$("#msg").html("<p>文本框的内容不能为空</p>“); //提示信息
event.preventDefault(); //阻止默认行为(表单提交)
}
});
});
</script>
用户名:<form action = "test" id="username"/ >
<input type="submit" value="提交" id="sub"/>
</form>
<div id="msg"></div>
如果想同时对事件对象停止冒泡和默认行为,可以在事件处理函数中返回false。这是对在事件对象上同时调用stopPrapagation()方法和preventDefault()方法的一种简写方式。即是将event。prevventDefault();改为return false;也可以将阻止事件冒泡改为return false;
事件捕获
事件捕获和事件冒泡刚好是相反的两个过程,事件捕获是从最顶端往下开始触发。从最外层开始到最里层元素。遗憾的是并非所有主流浏览器都支持事件捕获,并且这个缺陷无法通过javaScript来修复jQuery不支持事件捕获。如果需要使用事件捕获请直接使用原生的javascript。
事件对象的属性
jQuery在遵循W3C规范的情况下,对事件的对象常用属性进行了封装,使得事件处理在各大浏览器下都可以正常运行而不需要进行浏览器类型判断
//1.event.type作用是获取事件的类型
$("a").click(function(event){
alter(event.type);//获取事件类型
return false; //阻止连接跳转
})
//输出click
***********************************************************
//2.event.preventDefault()方法 //阻止事件默认行为 //3.event.stopPropagation()方法 //阻止事件冒泡 //4.event.target作用是获取触发事件的元素 $("a[href="http://google.com"]").click(functiom(){
var tg = event.target; //获取事件对象
alert(tg.href);
return false; //阻止连接跳转
})
//输出“http://google.com”
//更多的event属性和方法可以访问相关的API文档
移出事件
在绑定事件的过程中,不仅可以为同一个元素绑定多个事件,也可以为多个元素绑定同一个事件。假设网页上有一个<button>元素使用如下代码为该元素绑定多个事件
<script>
$(function(){
$('#btn').bind("click",function(){
$(#test).append("<p>我绑定的函数1</p>");
}).bind("click",function(){
$(#test).append("<p>我绑定的函数2</p>");
}).("click",function(){
$(#test).append("<p>我绑定的函数3</p>");
});
});
</script>
<button id = "btn">单击我</button>
<button id = "btn2">取消绑定事件</button>
<div id = "test"></div>
*************************************************
//我们要做的就是移除按钮上绑定的click事件
$(#btn2).click(function(){
$("#btn2").unbind("click"); //由于上面代码中事件都为click括号中可以不写参数
});
需要注意的是在1.7版本中又增加了on(),off(),delegate(),undelegate()事件绑定。
模拟操作
以上的例子都是用户必须通过单击按钮才能触发click事件,但是有的时候我们需要通过模拟用户操作来达到单击的效果,例如在用户进入页面后,就触发click事件,而不需要用户主动单击,在jQuery中我们使用trigger()方法就可以达到模拟操作的方法
语法:
$(#btn).trigger("click");
//也可以简写为:
$("#btn").click();
**************************************************
/触发自定义事件
$("#btn").bind("myClick",function(){
$("#test").append("<p>我的自定义事件</p>")
});
//触发这个自定义事件代码如下
$(#btn).trigger("myClick");
执行默认操作
//trigger()方法触发事件后,会执行浏览器默认操作如:
$("input").trigger("focus");
/*以上代码不仅会触发绑定的focus事件,也会使<input>自身得到焦点(这就是浏览器的默认操作)。如果只想触发绑定的focus事件,而不想执行默认操作,可以使用jQuery中另一个类似的方法---------triggerHandler()方法*/
$("input").triggerHandler("focus");
绑定多个事件类型
$(function(){
$("div").bind("mouseover mouseout",function(){
 $(this).toggleClass("over")
 });
});
好啦!jQuery中的事件就到这里了。如果有所帮助留下你的脚步
锋利的jQuery之事件的更多相关文章
- 【锋利的jQuery】中全局事件ajaxStart、ajaxStop不执行
		最近一直都在研究[锋利的jQuery],确实是一本好书,受益匪浅.但由于技术发展及版本更新等原因,里面还是有些坑需要踩的. 比如:第六章七节中提到的全局事件ajaxStart.ajaxStop照着案例 ... 
- 《锋利的jQuery》读书笔记(DOM+事件)
		前阵子买了一批书,就从锋利的jQuery看起吧,书中一些太过常规以及没有强记必要性的操作就不记录了. 1.DOM加载后执行JS $(document).ready(function(){ //.... ... 
- 锋利的jQuery学习总结
		通过对<锋利的jQuery>(第二版)一书的学习,发现此书讲解通俗易懂,是学习jQuery的一本很好的指导书,特作如下总结.此书主要讲解了jQuery的常用操作,包括认识jQuery,jQ ... 
- 锋利的jQuery(第二版)学习总结
		通过对<锋利的jQuery>(第二版)一书的学习,发现此书讲解通俗易懂,是学习jQuery的一本很好的指导书,特作如下总结. 此书主要讲解了jQuery的常用操作,包括认识jQuery,j ... 
- 《锋利的JQuery》读书要点笔记1——认识JQuery&&选择器
		<锋利的jQuery>源码下载,包括了这本书中全部代码以及用到的CSS文件 第一章 认识jQuery jQuery是个Js库.首先该明确的一点是:在jQuery库中$就是jQuery的一个 ... 
- 《锋利的jQuery》学习总结
		通过对<锋利的jQuery>(第二版)一书的学习,发现此书讲解通俗易懂,是学习jQuery的一本很好的指导书,特作如下总结.此书主要讲解了jQuery的常用操作,包括认识jQuery,jQ ... 
- Jquery的事件操作和文档操作
		对于熟悉前端开发的小伙伴,相信对于Jquery一定不陌生,相对于JavaScript的繁琐,Jquery更加的简洁,当然简洁不意味着简单,我们可以使用Jquery完成我们想要实现全部功能,这里为小白们 ... 
- 深入学习jQuery鼠标事件
		× 目录 [1]类型 [2]写法 [3]合成事件[4]鼠标按键[5]修改键[6]坐标位置 前面的话 鼠标事件是DOM事件中最常用的事件,jQuery对鼠标事件进行了封装和扩展.本文将详细介绍jQuer ... 
- 从零开始学习jQuery (五) 事件与事件对象
		本系列文章导航 从零开始学习jQuery (五) 事件与事件对象 一.摘要 事件是脚本编程的灵魂. 所以本章内容也是jQuery学习的重点. 本文将对jQuery中的事件处理以及事件对象进行详细的讲解 ... 
随机推荐
- hdu-----(1150)Machine Schedule(最小覆盖点)
			Machine Schedule Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ... 
- cf------(round)#1 B. Spreadsheets(模拟)
			B. Spreadsheets time limit per test 10 seconds memory limit per test 64 megabytes input standard inp ... 
- Search for a Range [LeetCode]
			Given a sorted array of integers, find the starting and ending position of a given target value. You ... 
- wordpress+php+mysql 配置
			下载并解压wordpress之后,在mysql新建一个数据库,命名,例如testDB1,然后在IIS中新建虚拟目录,指向wordress所在的目录,删除wordpress目录下的wp-config.p ... 
- HTTP脚本化——XMLHttpRequest对象的学习笔记
			一. HTTP 请求和响应 一个HTTP请求由4部分组成 HTTP请求方法(也叫动作Verb) 正在请求的URL 一个可选的请求头集合(可能包含身份验证信息等) 一个可选的请求主体 服务器返回的HTT ... 
- 原生JS 添加或者删除某个class
			$S.addHandler($S.getId(fav[i]),'mouseover',function(){ this.className += " " ... 
- lazyload 分页加载
			http://www.neoease.com/lazy-load-jquery-plugin-delay-load-image/ echo $d['pic']; ?>" src=&qu ... 
- 常州培训 day6 解题报告
			第一题: 题目大意: 给出一个N*N的矩阵,矩阵元素均为0或1.定义矩阵权值为sum(F[i][j]*F[j][i]); 给出K个操作: 询问矩阵的权值mod 2. 将矩阵的某一行元素取反(0变成1, ... 
- PhpStorm注册码 key license
			User name: EMBRACE License key: ===== LICENSE BEGIN =====43136-1204201000002UsvSON704l"dILe1PVx ... 
- python下的复杂网络编程包networkx的安装及使用
			由于py3.x与工具包的兼容问题,这里采用py2.7 1.python下的复杂网络编程包networkx的使用: http://blog.sina.com.cn/s/blog_720448d30101 ... 
