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 相关文章推荐
JavaScript 字符编码规则
May 04 Javascript
jquery实现鼠标拖拽滑动效果来选择数字的方法
May 04 Javascript
基于javascript制作微信聊天面板
Aug 09 Javascript
jQuery的Each比JS原生for循环性能慢很多的原因
Jul 05 Javascript
Angularjs使用过滤器完成排序功能
Sep 20 Javascript
详解Angular-ui-BootStrap组件的解释以及使用
Jul 13 Javascript
js实现导航跟随效果
Nov 17 Javascript
js取0-9随机取4个数不重复的数字代码实例
Mar 27 Javascript
JavaScript数组去重实现方法小结
Jan 17 Javascript
Node.js API详解之 module模块用法实例分析
May 13 Javascript
小程序瀑布流组件实现翻页与图片懒加载
May 19 Javascript
javascript实现前端input密码输入强度验证
Jun 24 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
再次研究下cache_lite
2007/02/14 PHP
discuz Passport 通行证 整合笔记
2008/06/30 PHP
解析php利用正则表达式解决采集内容排版的问题
2013/06/20 PHP
phpQuery占用内存过多的处理方法
2013/11/13 PHP
php初始化对象和析构函数的简单实例
2014/03/11 PHP
php cookie中点号(句号)自动转为下划线问题
2014/10/21 PHP
php json转换成数组形式代码分享
2014/11/10 PHP
WordPress中调试缩略图的相关PHP函数使用解析
2016/01/07 PHP
javascript自执行函数之伪命名空间封装法
2010/12/25 Javascript
javascript版的in_array函数(判断数组中是否存在特定值)
2014/05/09 Javascript
Javascript的&amp;&amp;和||的另类用法
2014/07/23 Javascript
JavaScript中检查对象property的存在性方法介绍
2014/12/30 Javascript
详解ElementUI之表单验证、数据绑定、路由跳转
2017/06/21 Javascript
详解webpack多页面配置记录
2018/01/22 Javascript
解决vue项目打包后提示图片文件路径错误的问题
2018/07/04 Javascript
webuploader分片上传的实现代码(前后端分离)
2018/09/10 Javascript
详解nodejs 配置文件处理方案
2019/01/02 NodeJs
AngularJS实现的鼠标拖动画矩形框示例【可兼容IE8】
2019/05/17 Javascript
Angular+Ionic使用queryParams实现跳转页传值的方法
2020/09/05 Javascript
[50:17]Newbee vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python数据类型学习笔记
2016/01/13 Python
编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法
2016/01/20 Python
Python学习小技巧之利用字典的默认行为
2017/05/20 Python
Python实现识别手写数字 Python图片读入与处理
2020/03/23 Python
Python Selenium Cookie 绕过验证码实现登录示例代码
2018/04/10 Python
Jupyter中直接显示Matplotlib的图形方法
2018/05/24 Python
攻击者是如何将PHP Phar包伪装成图像以绕过文件类型检测的(推荐)
2018/10/11 Python
python自动发邮件总结及实例说明【推荐】
2019/05/31 Python
TensorFlow自定义损失函数来预测商品销售量
2020/02/05 Python
配置H5的滚动条样式的示例代码
2018/03/09 HTML / CSS
美国在线面料商店:Online Fabric Store
2018/07/26 全球购物
关于环保的建议书
2014/05/12 职场文书
给校长的建议书500字
2014/05/15 职场文书
干部职工纪律作风整改措施思想汇报
2014/10/11 职场文书
活着观后感
2015/06/03 职场文书
Win10开机修复磁盘错误怎么跳过?Win10关闭开机磁盘检查的方法
2022/09/23 数码科技