初窥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实现的图片马赛克后显示并切换加文字功能
Apr 21 Javascript
jquery 经典动画菜单效果代码
Jan 26 Javascript
jQuery EasyUI 中文API Button使用实例
Apr 14 Javascript
自写的一个jQuery圆角插件
Oct 26 Javascript
javascript学习笔记(七)利用javascript来创建和存储cookie
Apr 08 Javascript
JavaScript实现常用二级省市级联下拉列表的方法
Mar 25 Javascript
jQuery同步提交示例代码
Dec 12 Javascript
JS触发服务器控件的单击事件(详解)
Aug 06 Javascript
微信小程序实现多选框全选与反全选及购物车中删除选中的商品功能
Dec 17 Javascript
微信小程序搜索框样式并实现跳转到搜索页面(小程序搜索功能)
Mar 10 Javascript
在vue中使用eslint,配合vscode的操作
Nov 09 Javascript
vue中defineProperty和Proxy的区别详解
Nov 30 Vue.js
初窥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实现WEB动态网页静态
2006/10/09 PHP
深入解析PHP中SESSION反序列化机制
2017/03/01 PHP
ThinkPHP实现登录退出功能
2017/06/29 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
2017/12/21 PHP
Thinkphp5行为使用方法汇总
2017/12/21 PHP
PHP实现给定一列字符,生成指定长度的所有可能组合示例
2019/06/22 PHP
thinkphp3.2框架中where条件查询用法总结
2019/08/13 PHP
基于jQuery的360图片展示实现代码
2012/06/14 Javascript
js操作textarea 常用方法总结
2012/12/03 Javascript
web开发人员学习jQuery的6大理由及jQuery的优势介绍
2013/01/03 Javascript
javascript实现多级联动下拉菜单的方法
2015/02/06 Javascript
简介JavaScript中Math.cos()余弦方法的使用
2015/06/15 Javascript
javascript密码强度校验代码(两种方法)
2015/08/10 Javascript
Vue动态获取width的方法
2018/08/22 Javascript
js中switch语句的学习笔记
2020/03/25 Javascript
[44:40]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
Python合并字符串的3种方法
2015/05/21 Python
Python实现截屏的函数
2015/07/26 Python
Python实现的多线程http压力测试代码
2017/02/08 Python
Python内置模块ConfigParser实现配置读写功能的方法
2018/02/12 Python
十分钟利用Python制作属于你自己的个性logo
2018/05/07 Python
详解Django 中是否使用时区的区别
2018/06/14 Python
django模板结构优化的方法
2019/02/28 Python
Python基础知识点 初识Python.md
2019/05/14 Python
Python安装及Pycharm安装使用教程图解
2019/09/20 Python
PyCharm2019安装教程及其使用(图文教程)
2019/09/29 Python
python 6.7 编写printTable()函数表格打印(完整代码)
2020/03/25 Python
Python任务调度模块APScheduler使用
2020/04/15 Python
html2 canvas生成清晰的图片实现打印功能
2019/09/23 HTML / CSS
前端H5 Video常见使用场景简介
2020/08/21 HTML / CSS
阿联酋航空丹麦官方网站:Emirates DK
2019/08/25 全球购物
酒店led欢迎词
2014/01/09 职场文书
小学教师年度个人总结
2015/02/05 职场文书
剖析后OpLog订阅MongoDB的数据变更就没那么难了
2022/02/24 MongoDB
css3 选择器
2022/05/11 HTML / CSS
SpringBoot深入分析讲解监听器模式下
2022/07/15 Java/Android