深入浅出 jQuery中的事件机制


Posted in Javascript onAugust 23, 2016

首先呢,我们先来看一下,jQuery中的ready事件,它的作用有些类似于window中的onload事件,只不过二者的区别在于,onload事件是要等到网页中的dom节点加载完成,并且css进行样式渲染后,JavaScript中进行了预加载后再执行,而ready事件呢,是在网页中的标签被解析为DOM节点是就执行其中的函数,直白点说,ready执行的比onload早,那么我们在用jQuery的时候,需要做一个ready的执行定义:

//ready的作用,是为具体加载的实现.
$(document).ready(function(){
alert('1234');
});
//第二种,少了一个document,创建一个空的jQuery对象.
$().ready(function(){
alert('abcd');
});
//第三种,简写版的,
$(function (){
alert('23333');
});

那么我们再来看一下onload和ready的第二个区别:

//如果有两个window.onload它只会执行最后一个.如果有多个的话,后边的会将前面的覆盖掉.
window.onload=function(){
alert(1);
}
window.onload = function(){
alert(2);
}
//而window.ready 则可以设置多个函数,都去作用.
$(document).ready(function(){alert(1)})
$(document).ready(function(){alert(3)})
//这里的可以设置多个函数,是指的对于同一个对象设置

那么我们再来看一下jQuery中的事件绑定,这里我们一onclick事件来举例,当我们在js中进行事件绑定的时候,我们分为dom1级事件,dom2级事件,其中还包括对于IE浏览器的兼容性考虑,那么当我们使用jQuery中的事件机制时,就不用去考虑那么多了,jQuery内部已经帮我们做好了兼容性之类的操作,讲真,这真的是很方便了我们了:

//DOM1级事件
var itNode = document.getElementById('id');
itNode.onclick = function(){};
div.onclick = null; DOM1级中解除事件绑定
//DOM2级事件
itNode.addEventListener('click',function(){});
itNode.removeEventListener();
itNode.attachEvent();//IE 6 8 7 兼容性处理
detachEvent(); IE中接触事件绑定
//使用jQuery来操作绑定事件
//$().事件类型(function(){});
//$().事件类型();
$(function(){
$('div').click(function(){//给div绑定了一个onclick事件
$('div').css('color','green');
});
$('div').mouseover(function(){
$(this).css('color','yellow');
});
});

这里的一个主意点就是当绑定事件时,事件名是不用写on的,其实我们还可以用另一种写法$('div').on('click',funciton(){});上面的那种写法就是这种写法的简化,二者的作用还是一样的.那么当我们需要给当前jQuery对象添加多个事件的时候,我们就可以使用bind方法来处理了:

//$().bind(事件类型,事件处理函数(分为有名函数,和匿名函数))
$(function(){
//绑定一个鼠标移动上去处理的事件.
$('div').bind('mouseover',function(){
$('div').css('background-color','blue');
});
$('div').bind('mouseout',function(){
$('div').css('background-color','yellow');
});
//一个函数绑定多个事件 这多个时间之间只需要用空格隔开.
//这个虽然可以绑定多个事件,但是函数比较单一,不灵活.
$('div').bind('mouseover mouseout',function(){
console.log(1234);
});
//使用对象的形式来绑定多个事件,
$('div').bind({
click: function(){console.log(1);},
mouseover: function(){alert(22);},
mouseout : function(){alert(33);}
});
//绑定有名的函数
function fa(){alert("fa");};
function fb(){alert("fb");};
function fc(){alert("fc");};
$('div').bind('click',fb);
$('div').bind('click',fc);
$('div').unbind();//这样直接调用unbind函数会直接将所有绑定的事件都取消掉.
$('div').unbind('click');//这样子就会将div里边所有的click绑定的事件取消掉了
//直接解除指定的函数的绑定,这种方式也只能解除有名函数的绑定,不能解除指定的匿名函数的绑定
$('div').unbind('click',fa);
});

当然,在事件处理中,事件对象无疑是我们经常要使用的一个对象,在js中,我们获取对象时还要考虑到兼容性问题,但是在jquery中,我们根本就不用考虑,只需要直接使用函数中传递的event参数就行了:

function(evt){
var evt = evt || window.event;
evt.preventDefault();//主流浏览器阻止默认事件
evt.returnValue = false;// IE中阻止对象默认事件
evt.stopPropagation();//主流浏览器中阻止浏览器冒泡
evt.cancelBubble();//IE中阻止浏览器冒泡处理
}
$().bind('click',function(evt){
//evt不用做兼容性处理
evt.preventDefault();//阻止浏览器的默认动作.
evt.stopPropagation();//阻止浏览器冒泡,
});

当然了,我们jQuery中的事件也是由键盘事件,鼠标事件,表单事件,甚至还有自定义的事件等等,和js中的基本一样,总结起来呢,使用jQuery使我们不用去考虑兼容性问题,同时代码量也大大的减少了.

以上所述是小编给大家介绍的jQuery中的事件机制,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
window.open被浏览器拦截后的自定义提示效果代码
Nov 19 Javascript
javascript和jquery实现设置和移除文本框默认值效果代码
Jan 13 Javascript
jQuery结合AJAX之在页面滚动时从服务器加载数据
Jun 30 Javascript
几句话带你理解JS中的this、闭包、原型链
Sep 26 Javascript
微信小程序  modal详解及实例代码
Nov 09 Javascript
jQuery复合事件结合toggle()方法的用法示例
Jun 10 jQuery
vuex 项目结构目录及一些简单配置介绍
Apr 08 Javascript
js脚本中执行java后台代码方法解析
Oct 11 Javascript
浅谈TypeScript的类型保护机制
Feb 23 Javascript
js实现无缝轮播图特效
May 09 Javascript
vue 获取url参数、get参数返回数组的操作
Nov 12 Javascript
Vue单页面应用中实现Markdown渲染
Feb 14 Vue.js
javascript实现简单的on事件绑定
Aug 23 #Javascript
js实现图片淡入淡出切换简易效果
Aug 22 #Javascript
JS对HTML表格进行增删改操作
Aug 22 #Javascript
AngularJS中$http服务常用的应用及参数
Aug 22 #Javascript
详解AngularJS如何实现跨域请求
Aug 22 #Javascript
深入浅析JS Function()构造函数
Aug 22 #Javascript
深入浅析jQuery对象$.html
Aug 22 #Javascript
You might like
最贵的咖啡是怎么产生的,它的风味怎么样?
2021/03/04 新手入门
jquery validate使用攻略 第四步
2010/07/01 Javascript
在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗
2011/06/02 Javascript
js 距离某一时间点时间是多少实现代码
2013/10/14 Javascript
javascript鼠标滑动评分控件完整实例
2015/05/13 Javascript
javascript判断网页是关闭还是刷新
2015/09/12 Javascript
深入浅析JavaScript字符串操作方法 slice、substr、substring及其IE兼容性
2015/12/16 Javascript
引用jquery框架后出错的解决方法
2016/08/09 Javascript
浅谈JavaScript 中有关时间对象的方法
2016/08/15 Javascript
浅析Jquery操作select
2016/12/13 Javascript
Javascript将图片的绝对路径转换为base64编码的方法
2018/01/11 Javascript
AngularJS监听ng-repeat渲染完成的方法
2018/03/20 Javascript
Angular动画实现的2种方式以及添加购物车动画实例代码
2018/08/09 Javascript
jquery获取元素到屏幕四周可视距离的方法
2018/09/05 jQuery
angularJS1 url中携带参数的获取方法
2018/10/09 Javascript
Nuxt项目支持eslint+pritter+typescript的实现
2019/05/20 Javascript
js实现页面多个日期时间倒计时效果
2019/06/20 Javascript
Python创建系统目录的方法
2015/03/11 Python
Python抓取电影天堂电影信息的代码
2016/04/07 Python
详解python里使用正则表达式的分组命名方式
2017/10/24 Python
django 按时间范围查询数据库实例代码
2018/02/11 Python
TensorFlow 滑动平均的示例代码
2018/06/19 Python
Python2 Selenium元素定位的实现(8种)
2019/02/25 Python
如何实现Django Rest framework版本控制
2019/07/25 Python
Python学习笔记之While循环用法分析
2019/08/14 Python
Python获取一个用户名的组ID过程解析
2019/09/03 Python
Django models filter筛选条件详解
2020/03/16 Python
Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告
2021/01/27 Python
北美三大旅游网站之一:Travelocity加拿大
2016/08/20 全球购物
凯特方迪化妆品官网:Kat Von D Beauty
2016/11/15 全球购物
MCAKE蛋糕官方网站:一直都是巴黎的味道
2018/02/06 全球购物
Gerry Weber德国官网:优质女性时装,德国最大的时装公司之一
2019/11/02 全球购物
中学生旷课检讨书500字
2014/10/29 职场文书
慈善募捐倡议书
2015/04/27 职场文书
2016年师德先进个人事迹材料
2016/02/29 职场文书
详解Oracle块修改跟踪功能
2021/11/07 Oracle