jQuery中用on绑定事件时需注意的事项


Posted in Javascript onMarch 19, 2017

随着jQuery版本的更新,以前版本的Bind(),live(),delegate()事件可以直接被on代替,本次笔记仅以点击事件为例,主要考察了on事件的用法:

一、用on监听点击事件前添加的DOM,可以正常触发:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style type="text/css">
 #test {
 height: 100px;
 font-size: 50px;
 color: yellow;
 line-height: 100px;
 background-color: red;
 text-align: center;
 }
</style>
<script src="http://lib.sinaapp.com/js/jquery/2.0.2/jquery-2.0.2.min.js"></script>
<script>
 $( function(){
 var oDiv = $('<div id="test">点我</div>');
 $(document.body).append(oDiv);
 $("#test").on('click', function(){
 alert('这是事件前添加的DOM,可以正常触发点击事件');
 });
 } );
</script>
</head>
<body>
 <div id="wrap"></div>
</body>
</html>

二、用on监听点击事件后添加的DOM,无法正常触发:

<!-- 一、正常的DOM: -->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style type="text/css">
 #test {
 height: 100px;
 font-size: 50px;
 color: yellow;
 line-height: 100px;
 background-color: red;
 text-align: center;
 }
</style>
<script src="http://lib.sinaapp.com/js/jquery/2.0.2/jquery-2.0.2.min.js"></script>
<script>
 $( function(){
 $("#test").on('click', function(){
 alert('这是事件后添加的DOM,无法正常触发点击事件');
 });
 var oDiv = $('<div id="test">点我</div>');
 $(document.body).append(oDiv);
 } );
</script>
</head>
<body>
 <div id="wrap"></div>
</body>
</html>

三、解决办法:利用事件委托。需要注意的是:委托的对象必须是DOM中已经存在或者事件前动态添加,此时,用on监听后后可以正常触发事件,否则如:步骤四:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style type="text/css">
 #test {
 height: 100px;
 font-size: 50px;
 color: yellow;
 line-height: 100px;
 background-color: red;
 text-align: center;
 }
</style>
<script src="http://lib.sinaapp.com/js/jquery/2.0.2/jquery-2.0.2.min.js"></script>
<script>
 $( function(){
 var oWrap = $('<div id="wrap"></div>');
 $(document.body).append(oWrap);
 $("#wrap").on('click', $('#test'), function(){
 alert('委托对象在事件前添加,可以正常触发点击事件');
 });
 var oDiv = $('<div id="test">点我</div>');
 $("#wrap").append(oDiv);
 } );
</script>
</head>
<body>
</body>
</html>

四、委托对象在事件后添加,无法触发点击事件

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style type="text/css">
 #test {
 height: 100px;
 font-size: 50px;
 color: yellow;
 line-height: 100px;
 background-color: red;
 text-align: center;
 }
</style>
<script src="http://lib.sinaapp.com/js/jquery/2.0.2/jquery-2.0.2.min.js"></script>
<script>
 $( function(){
 $("#wrap").on('click', $('#test'), function(){
 alert('委托对象在事件后添加,无法正常触发点击事件');
 });
 var oWrap = $('<div id="wrap"></div>');
 $(document.body).append(oWrap);
 var oDiv = $('<div id="test">点我</div>');
 $("#wrap").append(oDiv);
 } );
</script>
</head>
<body>
</body>
</html>

五、说明:工作中,on事件比较常用的还是事件绑定和事件委托,至少我碰到的比较多,live事件on用法主要是前面的jQuery对象变成了document,如:$(document).on(),故不另作举例。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
通过正则格式化url查询字符串实现代码
Dec 28 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(一)让静态人物动起来
Jan 23 Javascript
js中parseFloat(参数1,参数2)定义和用法及注意事项
Jan 27 Javascript
jquery无法设置checkbox选中即没有变成选中状态
Mar 27 Javascript
js实现获取焦点后光标在字符串后
Sep 17 Javascript
完美解决IE9浏览器出现的对象未定义问题
Sep 29 Javascript
JavaScript实现窗口抖动效果
Oct 19 Javascript
javascript浏览器用户代理检测脚本实现方法
Oct 27 Javascript
vuex实现登录状态的存储,未登录状态不允许浏览的方法
Mar 09 Javascript
Express本地测试HTTPS的示例代码
Jun 06 Javascript
如何解决vue在ios微信&quot;复制链接&quot;功能问题
Mar 26 Javascript
js动态添加带圆圈序号列表的实例代码
Feb 18 Javascript
$.browser.msie 为空或不是对象问题的多种解决方法
Mar 19 #Javascript
JavaScript数据结构之链表的实现
Mar 19 #Javascript
用jQuery实现圆点图片轮播效果
Mar 19 #Javascript
Bootstrap 网格系统布局详解
Mar 19 #Javascript
用JavaScript和jQuery实现瀑布流
Mar 19 #Javascript
JSONP基础知识详解
Mar 19 #Javascript
jQuery中table数据的值拷贝和拆分
Mar 19 #Javascript
You might like
PHP中加密解密函数与DES加密解密实例
2014/10/17 PHP
php  单例模式详细介绍及实现源码
2016/11/05 PHP
jQuery制作仿腾讯web qq用户体验桌面
2013/08/20 Javascript
js实现幻灯片播放图片示例代码
2013/11/07 Javascript
node.js中的fs.createWriteStream方法使用说明
2014/12/17 Javascript
jQuery中filter()方法用法实例
2015/01/06 Javascript
js实现数字每三位加逗号的方法
2015/02/05 Javascript
jQuery前端分页示例分享
2015/02/10 Javascript
Node.js和MongoDB实现简单日志分析系统
2015/04/25 Javascript
基于javascript实现彩票随机数生成(升级版)
2020/04/17 Javascript
javascript实现数字倒计时特效
2016/03/30 Javascript
NodeJS的Promise的用法解析
2016/05/05 NodeJs
20分钟打造属于你的Bootstrap站点
2016/07/27 Javascript
Javascript日期格式化format函数的使用方法
2016/08/30 Javascript
微信小程序 video详解及简单实例
2017/01/16 Javascript
Angularjs的启动过程分析
2017/07/18 Javascript
微信小程序之 catalog 切换实现解析
2019/09/12 Javascript
对Layer UI 模块化的用法详解
2019/09/26 Javascript
[44:40]Serenity vs Pain 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
解决python2.7 查询mysql时出现中文乱码
2016/10/09 Python
浅谈python字典多键值及重复键值的使用
2016/11/04 Python
详解Python中的静态方法与类成员方法
2017/02/28 Python
django 解决manage.py migrate无效的问题
2018/05/27 Python
基于python绘制科赫雪花
2018/06/22 Python
面向初学者的Python编辑器Mu
2018/10/08 Python
使用Keras中的ImageDataGenerator进行批次读图方式
2020/06/17 Python
教师年度考核评语
2014/04/28 职场文书
产品生产计划书
2014/05/07 职场文书
邀请函怎么写
2015/01/30 职场文书
干部培训工作总结2015
2015/05/25 职场文书
公安干警正风肃纪心得体会
2016/01/15 职场文书
入伍志愿书怎么写?
2019/07/19 职场文书
CSS 文字装饰 text-decoration & text-emphasis 详解
2021/04/06 HTML / CSS
python文件目录操作之os模块
2021/05/08 Python
你真的了解redis为什么要提供pipeline功能
2021/06/22 Redis
使用pd.merge表连接出现多余行的问题解决
2022/06/16 Python