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 相关文章推荐
jQuery学习总结之jQuery事件
Jun 30 Javascript
AngularJS实现与Java Web服务器交互操作示例【附demo源码下载】
Nov 02 Javascript
jQuery插件ImgAreaSelect实现头像上传预览和裁剪功能实例讲解一
May 26 jQuery
webpack构建react多页面应用详解
Sep 15 Javascript
详解es6超好用的语法糖Decorator
Aug 01 Javascript
微信小程序多音频播放进度条问题
Aug 28 Javascript
详解vue中移动端自适应方案
May 05 Javascript
vue 解决异步数据更新问题
Oct 29 Javascript
Vue快速实现通用表单验证功能
Dec 05 Javascript
jQuery实现开关灯效果
Aug 02 jQuery
关于小程序优化的一些建议(小结)
Dec 10 Javascript
Vue elementUI表单嵌套表格并对每行进行校验详解
Feb 18 Vue.js
$.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
php5中类的学习
2008/03/28 PHP
php数组函数序列之array_sum() - 计算数组元素值之和
2011/10/29 PHP
解密ThinkPHP3.1.2版本之模板继承
2014/06/19 PHP
Yii操作数据库实现动态获取表名的方法
2016/03/29 PHP
php判断str字符串是否是xml格式数据的方法示例
2017/07/26 PHP
浅谈PHP中pack、unpack的详细用法
2018/03/12 PHP
PHP+Mysql分布式事务与解决方案深入理解
2021/02/27 PHP
js substr、substring和slice使用说明小记
2011/09/15 Javascript
js中根据字数截取字符串,不能截断url
2012/01/12 Javascript
关于js注册事件的常用方法
2013/04/03 Javascript
浅析LigerUi开发中谨慎载入common.css文件
2013/07/09 Javascript
jquery遍历checkbox介绍
2014/02/21 Javascript
javascript父子页面通讯实例详解
2015/07/17 Javascript
jquery插件ajaxupload实现文件上传操作
2015/12/09 Javascript
利用JS实现数字增长
2016/07/28 Javascript
jQuery基于Ajax方式提交表单功能示例
2017/02/10 Javascript
JS中使用react-tooltip插件实现鼠标悬浮显示框
2019/05/15 Javascript
[01:53]3.19 DOTA2发布会 现场精彩Coser表演
2014/03/25 DOTA
python的描述符(descriptor)、装饰器(property)造成的一个无限递归问题分享
2014/07/09 Python
python的else子句使用指南
2016/02/27 Python
python编程嵌套函数实例代码
2018/02/11 Python
TensorFlow实现Batch Normalization
2018/03/08 Python
Numpy掩码式数组详解
2018/04/17 Python
在Python中获取操作系统的进程信息
2019/08/27 Python
python3.6.8 + pycharm + PyQt5 环境搭建的图文教程
2020/06/11 Python
解决redis与Python交互取出来的是bytes类型的问题
2020/07/16 Python
在python3.9下如何安装scrapy的方法
2021/02/03 Python
Microsoft新加坡官方网站:购买微软最新软件和技术产品
2016/10/28 全球购物
物业招聘计划书
2014/01/10 职场文书
乡镇办公室工作决心书
2014/03/11 职场文书
关于安全的演讲稿
2014/05/09 职场文书
企业读书活动总结
2014/06/30 职场文书
golang正则之命名分组方式
2021/04/25 Golang
Python数据可视化之用Matplotlib绘制常用图形
2021/06/03 Python
一篇带你入门Java垃圾回收器
2021/06/16 Java/Android
Oracle 触发器trigger使用案例
2022/02/24 Oracle