初窥JQuery(二) 事件机制(1)


Posted in Javascript onNovember 25, 2010

当然它的优点并不只在于这点,使用JQuery事件处理机制比直接使用Javascript本身内置的一些事件相应方式更加的灵活,更加不容易暴露在外,而且有更加优雅的语法,大大减少了我们工作的量度。

JQuery的事件处理机制包括:页面加载、事件绑定、事件委派、事件切换四种机制。我们先从$(document).ready()事件开始。

  一、页面加载$(document).ready()相当与Javascript中的onLoad()事件,都是在页面加载的时候执行该方法,但是两者又有着微妙的差别,ready()事件是当HTML下载完成并解析成DOM树之后就可以执行,而onLoad()事件要等HTML包括文件都下载完成之后才能执行。我们在ready()事件中可以绑定其他的一些事件或者函数,ready()有几种语法可以表示:

$(document).ready(function(){});

$().ready(function(){});

$(function(){});

当然我个人还是习惯于用第一种,增强可读性,需要注意的是在使用ready()事件的时候请确保在 <body> 元素的onload事件中没有注册函数,否则不会触发$(document).ready()事件。也可以在同一个页面中无限次地使用$(document).ready()事件。其中注册的函数会按照(代码中的)先后顺序依次执行。

二、事件切换只有两个方法,就是hover()和toggle()两个方法,由于他们截取组合的用户操作,并且以多个函数响应,因此也称为复合事件处理机制。hover()方法是一个模仿鼠标悬停变化的方法,简单的说就是鼠标移入移出是时候执行你指定的行为的方法,我们最常用的就是做菜单切换效果。toggle()方法就是当你点击按照顺序执行你指定的函数方法,第一次点击执行第一个函数,第二次点击执行第二个函数,以此类推,它可以使用事件绑定中的unbind('click')方法删除。

hover(over,out)实例:

<style type="text/css"> 
#Menu 
{ 
background-color:Red; 
width:150px; 
height:30px; 
text-align:center; 
border:solid 1px black; 
} 
#Menu_child 
{ 
width:150px; 
border:solid 1px black; 
display:none; 
} 
#Menu_child div 
{ 
background-color:#f3f3f3; 
width:150px; 
height:30px; 
text-align:center; 
} 
</style> 
<script language="javascript" type="text/javascript"> 
$(document).ready(function() { 
$("#Menu").hover( 
function() { 
$("#Menu_child").fadeIn(); 
}, 
function() { 
$("#Menu_child").fadeOut(); 
}); 
}); 
</script> 
</head> 
<body> 
<div id="Menu">JQuery事件处理</div> 
<div id="Menu_child"> 
<div>页面加载</div> 
<div>事件绑定</div> 
<div>事件委派</div> 
<div>事件切换</div> 
</div> 
</body>

toggle(fn,fn)实例:
HTML代码 
<input type="button" value="toggle()方法" id="toggle" /> 
JQuery代码 
$("#toggle").toggle( 
function() { 
alert("第一次点击"); 
}, 
function() { 
alert("第二次点击"); 
}, 
function() { 
alert("第三次点击"); 
}, 
function() { 
alert("第四次点击"); 
});

三、事件委派中也只有两个方法,live()和die()两个方法,这两个方法是1.3版本之后才新增的,之前的版本是没有的。live()可以理解成元素组事件委派方法,比如li元素用live绑定了click事件。那么当在以后增加一个li到这个页面时,对于这个新增加的li,其click事件依然可用,而无需重新给这种新增加的元素绑定事件,在编写树形插件的时候相当有用。die()方法就很好解释,用来解除live()绑定的方法。

live(type,fn):live()中type参数目前只支持click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, keydown, keypress, keyup事件。实例如下

HTML代码: 
<ul> 
<li>页面加载</li> 
<li>事件绑定</li> 
<li>事件委派</li> 
<li>事件切换</li> 
</ul> 
JQuery代码: 
$("li").live('click', function() { 
var index = $("li").index(this);//获取li的索引 
var text = $("li").eq(index).text();//根据单击项索引获得文本值 
alert("索引:" + index + ",文本值:" + text); 
});

die([type],[fn]):die()使用起来相当简单,一种删除所有live()事件,一种指定删除,两个参数是可选的。
$("#die").click(function() { 
$("li").die(); //删除所有live()事件 
$("li").die("click");//删除指定为click的live()事件 
$("li").die('click', function() { alert("删除live()事件成功") });//删除指定为click的live()事件并执行函数 
});

仅供参考,欢迎感兴趣的朋友参与讨论。下篇文章再说事件绑定,写一起太长了。未完待续........
Javascript 相关文章推荐
屏蔽Flash右键信息的js代码
Jan 17 Javascript
jQuery Easyui实现左右布局
Jan 26 Javascript
JQuery ztree 异步加载实例讲解
Feb 25 Javascript
Jquery针对tr td的一些实用操作方法(必看篇)
Oct 05 Javascript
AngularJS指令与控制器之间的交互功能示例
Dec 14 Javascript
加载 vue 远程代码的组件实例详解
Nov 20 Javascript
vue中如何让子组件修改父组件数据
Jun 14 Javascript
layui switch 开关监听 弹出确定状态转换的例子
Sep 21 Javascript
vue输入框使用模糊搜索功能的实现代码
May 26 Javascript
解决微信授权成功后点击按返回键出现空白页和报错的问题
Jun 08 Javascript
简介JavaScript错误处理机制
Aug 04 Javascript
vue+element获取el-table某行的下标,根据下标操作数组对象方式
Aug 07 Javascript
初窥JQuery(一)jquery选择符 必备知识点
Nov 25 #Javascript
初窥JQuery-Jquery简介 入门了解篇
Nov 25 #Javascript
学习并汇集javascript匿名函数
Nov 25 #Javascript
汉化英文版的Dreamweaver CS5并自动提示jquery
Nov 25 #Javascript
XMLHTTPRequest的属性和方法简介
Nov 23 #Javascript
写给想学习Javascript的朋友一点学习经验小结
Nov 23 #Javascript
HTML颜色选择器实现代码
Nov 23 #Javascript
You might like
Zend引擎的发展 [15]
2006/10/09 PHP
PHP中GET变量的使用
2006/10/09 PHP
php excel reader读取excel内容存入数据库实现代码
2012/12/06 PHP
destoon二次开发入门示例
2014/06/20 PHP
php计算title标题相似比的方法
2015/07/29 PHP
Laravel中使用Queue的最基本操作教程
2017/12/27 PHP
Thinkphp 框架基础之源码获取、环境要求与目录结构分析
2020/04/27 PHP
JavaScript constructor和instanceof,JSOO中的一对欢喜冤家
2009/05/25 Javascript
教你在heroku云平台上部署Node.js应用
2014/07/30 Javascript
javascript的tab切换原理与效果实现方法
2015/01/10 Javascript
JS获取当前使用的浏览器名字以及版本号实现方法
2016/08/19 Javascript
JQuery.dataTables表格插件添加跳转到指定页
2017/06/09 jQuery
vue+swiper实现组件化开发的实例代码
2017/10/26 Javascript
原生js实现移动端触摸轮播的示例代码
2017/12/22 Javascript
vue引入ueditor及node后台配置详解
2018/01/03 Javascript
vue-cli webpack 引入jquery的方法
2018/01/10 jQuery
Angular 容器部署的方法
2018/04/17 Javascript
Vue中点击active并第一个默认选中功能的实现
2020/02/24 Javascript
vue2路由方式--嵌套路由实现方法分析
2020/03/06 Javascript
js面向对象方式实现拖拽效果
2021/03/03 Javascript
[41:20]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS DK
2014/05/26 DOTA
python新手经常遇到的17个错误分析
2014/07/30 Python
Python的requests网络编程包使用教程
2016/07/11 Python
Django ORM框架的定时任务如何使用详解
2017/10/19 Python
对python过滤器和lambda函数的用法详解
2019/01/21 Python
python接口自动化测试之接口数据依赖的实现方法
2019/04/26 Python
Python操作远程服务器 paramiko模块详细介绍
2019/08/07 Python
Python3 实现爬取网站下所有URL方式
2020/01/16 Python
小学生打架检讨书
2014/01/26 职场文书
求职信需要的五点内容
2014/02/01 职场文书
环保建议书100字
2014/05/14 职场文书
乡镇党委书记第三阶段个人整改措施
2014/09/16 职场文书
2015年世界无烟日演讲稿
2015/03/18 职场文书
教你用eclipse连接mysql数据库
2021/04/22 MySQL
python 中的jieba分词库
2021/11/23 Python
使用scrapy实现增量式爬取方式
2022/06/21 Python