初窥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 相关文章推荐
JS 建立对象的方法
Apr 21 Javascript
jQuery boxy弹出层插件中文演示及使用讲解
Feb 24 Javascript
js内置对象 学习笔记
Aug 01 Javascript
ASP.NET jQuery 实例17 通过使用jQuery validation插件校验ListBox
Feb 03 Javascript
js传中文参数controller里获取参数乱码问题解决方法
Jan 03 Javascript
js选项卡的实现方法
Feb 09 Javascript
JavaScript实现给按钮加上双重动作的方法
Aug 14 Javascript
JS+CSS3模拟溢出滚动效果
Aug 12 Javascript
jQuery插件zTree实现更新根节点中第i个节点名称的方法示例
Mar 08 Javascript
微信小程序实战之自定义toast(6)
Apr 18 Javascript
关于javascript获取内联样式与嵌入式样式的实例
Jun 01 Javascript
使用jQuery如何写一个含验证码的登录界面
May 13 jQuery
初窥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
第1次亲密接触PHP5(2)
2006/10/09 PHP
多php服务器实现多session并发运行
2006/10/09 PHP
基于PHP生成简单的验证码
2016/06/01 PHP
利用php操作memcache缓存的基础方法示例
2017/08/02 PHP
一份老外写的XMLHttpRequest代码多浏览器支持兼容性
2007/01/11 Javascript
js实现的复制兼容chrome和IE
2014/04/03 Javascript
js拼接html注意问题示例探讨
2014/07/14 Javascript
JavaScript中对象property的删除方法介绍
2014/12/30 Javascript
超赞的动手创建JavaScript框架的详细教程
2015/06/30 Javascript
jQuery中(function($){})(jQuery)详解
2015/07/15 Javascript
JS自定义选项卡函数及用法实例分析
2015/09/02 Javascript
jquery事件的ready()方法使用详解
2015/11/11 Javascript
通过jquery实现页面的动画效果(实例代码)
2016/09/18 Javascript
原生js获取浏览器窗口及元素宽高常用方法集合
2017/01/18 Javascript
利用nodejs监控文件变化并使用sftp上传到服务器
2017/02/18 NodeJs
Vue.js搭建移动端购物车界面
2020/06/28 Javascript
在vue中使用SockJS实现webSocket通信的过程
2018/08/29 Javascript
layui导出所有数据的例子
2019/09/10 Javascript
关于在LayUI中使用AJAX提交巨坑记录
2019/10/25 Javascript
javascript数组的定义及操作实例
2019/11/10 Javascript
JS三级联动代码格式实例详解
2019/12/30 Javascript
javascript实现拖拽碰撞检测
2020/03/12 Javascript
浅析我对JS延迟异步脚本的思考
2020/10/12 Javascript
浅谈python正则的常用方法 覆盖范围70%以上
2018/03/14 Python
python机器学习之随机森林(七)
2018/03/26 Python
详解Python列表赋值复制深拷贝及5种浅拷贝
2019/05/15 Python
详解Python字符串切片
2019/05/20 Python
pygame实现烟雨蒙蒙下彩虹雨
2019/11/11 Python
一文了解python 3 字符串格式化 F-string 用法
2020/03/04 Python
DRF框架API版本管理实现方法解析
2020/08/21 Python
基于Modernizr 让网站进行优雅降级的分析
2013/04/21 HTML / CSS
能否解释一下XSS cookie盗窃是什么意思
2012/06/02 面试题
妇女儿童发展规划实施方案
2014/03/16 职场文书
先进个人自荐书
2015/03/06 职场文书
小学班主任心得体会
2016/01/07 职场文书
Hive常用日期格式转换语法
2022/06/25 数据库