初窥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 相关文章推荐
IE的有条件注释判定IE版本详解(附实例代码)
Jan 04 Javascript
node.js中的http.createClient方法使用说明
Dec 15 Javascript
JavaScript中连接操作Oracle数据库实例
Apr 02 Javascript
javascript生成不重复的随机数
Jul 17 Javascript
jQuery增加、删除及修改select option的方法
Aug 19 Javascript
angular route中使用resolve在uglify压缩后问题解决
Sep 21 Javascript
详解React开发中使用require.ensure()按需加载ES6组件
May 12 Javascript
Vue-router的使用和出现空白页,路由对象属性详解
Sep 03 Javascript
微信小程序实现富文本图片宽度自适应的方法
Jan 20 Javascript
深入理解使用Vue实现Context-Menu的思考与总结
Mar 09 Javascript
JS删除String里某个字符的方法
Jan 06 Javascript
Vue+Koa2 打包后进行线上部署的教程详解
Jul 31 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
web 页面分页打印的实现
2009/06/22 Javascript
JavaScript 学习技巧
2010/02/17 Javascript
jquery中的mouseleave和mouseout的区别 模仿下拉框效果
2012/02/07 Javascript
js拖动div 当鼠标移动时整个div也相应的移动
2013/11/21 Javascript
完善的jquery处理机制
2016/02/21 Javascript
js实现精确到秒的倒计时效果
2016/05/29 Javascript
JS制作类似选项卡切换的年历
2016/12/03 Javascript
JS中使用 after 伪类清除浮动实例
2017/03/01 Javascript
Nodejs 发布自己的npm包并制作成命令行工具的实例讲解
2018/05/15 NodeJs
自定义Vue中的v-module双向绑定的实现
2019/04/17 Javascript
如何写好一个vue组件,老夫的一年经验全在这了(推荐)
2019/05/18 Javascript
微信小程序sessionid不一致问题解决
2019/08/30 Javascript
Python读写unicode文件的方法
2015/07/10 Python
Python序列化基础知识(json/pickle)
2017/10/19 Python
idea创建springMVC框架和配置小文件的教程图解
2018/09/18 Python
Python异常的检测和处理方法
2018/10/26 Python
python 根据时间来生成唯一的字符串方法
2019/01/14 Python
Django给admin添加Action的步骤详解
2019/05/01 Python
已安装tensorflow-gpu,但keras无法使用GPU加速的解决
2020/02/07 Python
Python 实现Image和Ndarray互相转换
2020/02/19 Python
Selenium alert 弹窗处理的示例代码
2020/08/06 Python
Python爬取你好李焕英豆瓣短评生成词云的示例代码
2021/02/24 Python
HTML5学习笔记之html5与传统html区别
2016/01/06 HTML / CSS
Champion澳大利亚官网:美国冠军运动服装
2018/05/07 全球购物
德国香水、化妆品和护理产品网上商店:Parfumdreams
2018/09/26 全球购物
伦敦最受欢迎的蛋糕店:Konditor & Cook
2019/11/01 全球购物
农村产权制度改革实施方案
2014/03/21 职场文书
幼儿园教师的考核评语
2014/04/18 职场文书
人事专员岗位说明书
2014/07/29 职场文书
个人优缺点总结
2015/02/28 职场文书
2015年全民国防教育日活动总结
2015/03/23 职场文书
《小蝌蚪找妈妈》教学反思
2016/02/23 职场文书
党员学习型组织心得体会
2019/06/21 职场文书
分享MySQL常用 内核 Debug 几种常见方法
2022/03/17 MySQL
Vue组件更新数据v-model不生效的解决
2022/04/02 Vue.js
SQL使用复合索引实现数据库查询的优化
2022/05/25 SQL Server