初窥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 相关文章推荐
javascript学习笔记(三) String 字符串类型介绍
Jun 19 Javascript
左侧是表头的JS表格控件(自写,网上没有的)
Jun 04 Javascript
JS页面延迟执行一些方法(整理)
Nov 11 Javascript
利用js动态添加删除table行的示例代码
Dec 16 Javascript
JS获取select-option-text_value的方法
Dec 26 Javascript
VUEJS实战之构建基础并渲染出列表(1)
Jun 13 Javascript
js实现3d悬浮效果
Feb 16 Javascript
Vue keep-alive实践总结(推荐)
Aug 31 Javascript
浅谈webpack编译vue项目生成的代码探索
Dec 11 Javascript
Vue自定义全局Toast和Loading的实例详解
Apr 18 Javascript
JavaScript使用表单元素验证表单的示例代码
Aug 20 Javascript
JS实现排行榜文字向上滚动轮播效果
Nov 26 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
PHP的类 功能齐全的发送邮件类
2006/10/09 PHP
PHP.ini中配置屏蔽错误信息显示和保存错误日志的例子
2014/05/12 PHP
Yii2 ActiveRecord多表关联及多表关联搜索的实现
2016/06/30 PHP
PHP简单创建压缩图的方法
2016/08/24 PHP
Aster vs KG BO3 第二场2.19
2021/03/10 DOTA
Prototype最新版(1.5 rc2)使用指南(1)
2007/01/10 Javascript
js获取图片大小的函数代码
2011/09/20 Javascript
javaScript实现可缩放的显示区效果代码
2015/10/26 Javascript
基于AngularJS+HTML+Groovy实现登录功能
2016/02/17 Javascript
JavaScript实现显示函数调用堆栈的方法
2016/04/21 Javascript
JavaScript数组_动力节点Java学院整理
2017/06/26 Javascript
详解 vue.js用法和特性
2017/10/15 Javascript
微信小程序实现横向滚动导航栏效果
2019/12/12 Javascript
Node.js Domain 模块实例详解
2020/03/18 Javascript
[01:29:17]RNG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
2014/08/22 Python
numpy 进行数组拼接,分别在行和列上合并的实例
2018/05/08 Python
Python 分发包中添加额外文件的方法
2019/08/16 Python
多版本python的pip 升级后, pip2 pip3 与python版本失配解决方法
2019/09/11 Python
浅谈spring boot 集成 log4j 解决与logback冲突的问题
2020/02/20 Python
浅谈python的elementtree模块处理中文注意事项
2020/03/06 Python
Django 拼接两个queryset 或是两个不可以相加的对象实例
2020/03/28 Python
Python插件机制实现详解
2020/05/04 Python
python爬虫利器之requests库的用法(超全面的爬取网页案例)
2020/12/17 Python
Shopee马来西亚:随拍即卖,最佳行动电商拍卖平台
2017/06/05 全球购物
外贸销售员求职的自我评价
2013/11/23 职场文书
读群众路线的心得体会
2014/09/03 职场文书
领导班子在批评与自我批评座谈会上的发言
2014/09/28 职场文书
领导干部群众路线剖析材料
2014/10/09 职场文书
药店营业员岗位职责
2015/04/14 职场文书
永不妥协观后感
2015/06/10 职场文书
催款函范文
2015/06/24 职场文书
高一军训口号
2015/12/25 职场文书
PyTorch中permute的使用方法
2022/04/26 Python
VUE解决跨域问题Access to XMLHttpRequest at
2022/05/06 Vue.js
SQL Server 中的事务介绍
2022/05/20 SQL Server