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中找到子元素在父元素内相对位置的代码
Jul 21 Javascript
js 表单提交后按钮变灰的实例代码
Aug 16 Javascript
跟我学习javascript的函数和函数表达式
Nov 16 Javascript
利用AngularJs实现京东首页轮播图效果
Sep 08 Javascript
jQuery Checkbox 全选 反选的简单实例
Nov 29 Javascript
基于angular实现模拟微信小程序swiper组件
Jun 11 Javascript
利用vscode编写vue的简单配置详解
Jun 17 Javascript
基于casperjs和resemble.js实现一个像素对比服务详解
Jan 10 Javascript
解决layer.open后laydate失效的问题
Sep 06 Javascript
layui将table转化表单显示的方法(即table.render转为表单展示)
Sep 24 Javascript
Node.js API详解之 Error模块用法实例分析
May 14 Javascript
JS中forEach()、map()、every()、some()和filter()的用法
May 11 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
星际中的相关伤害
2020/03/04 星际争霸
PHP4之COOKIE支持详解
2006/10/09 PHP
初步介绍PHP扩展开发经验分享
2012/09/06 PHP
php采集文章中的图片获取替换到本地(实现代码)
2013/07/08 PHP
PHP文件及文件夹操作之创建、删除、移动、复制
2016/07/13 PHP
PHP代码重构方法漫谈
2018/04/17 PHP
jquery form表单提交插件asp.net后台中文解码
2010/06/12 Javascript
jquery的相对父元素和相对文档定位示例代码
2013/08/02 Javascript
jQuery中的$.ajax()方法应用
2014/05/06 Javascript
jquery使用$(element).is()来判断获取的tagName
2014/08/24 Javascript
JavaScript删除指定子元素代码实例
2015/01/13 Javascript
jQuery实现的点赞随机数字显示动画效果(附在线演示与demo源码下载)
2015/12/31 Javascript
Javascript之Date对象详解
2016/06/07 Javascript
JavaScript全屏和退出全屏事件总结(附代码)
2017/08/17 Javascript
vue 实现边输入边搜索功能的实例讲解
2018/09/16 Javascript
angularjs使用div模拟textarea文本框的方法
2018/10/02 Javascript
详解elementui之el-image-viewer(图片查看器)
2019/08/30 Javascript
[45:44]完美世界DOTA2联赛PWL S2 FTD vs PXG 第一场 11.27
2020/12/01 DOTA
python用模块zlib压缩与解压字符串和文件的方法
2016/12/16 Python
python正则表达式的使用
2017/06/12 Python
使用Python操作excel文件的实例代码
2017/10/15 Python
Django项目中model的数据处理以及页面交互方法
2018/05/30 Python
Python3 实现爬取网站下所有URL方式
2020/01/16 Python
tensorflow estimator 使用hook实现finetune方式
2020/01/21 Python
详解python日志输出使用配置文件格式
2021/02/10 Python
CSS3 input框的实现代码类似Google登录的动画效果
2020/08/04 HTML / CSS
日本快乐生活方式购物网站:Shop Japan
2018/07/17 全球购物
MYPROTEIN澳大利亚官方网站:欧洲运动营养品牌
2019/06/26 全球购物
KELLER SPORTS荷兰:在线订购最好的运动产品
2020/10/13 全球购物
Ajax主要包含了哪些技术
2014/06/12 面试题
教你打造完美的创业计划书
2014/01/06 职场文书
考试作弊被抓检讨书
2014/01/10 职场文书
2015年安全生产目标责任书
2015/01/29 职场文书
毕业论文致谢信
2015/05/14 职场文书
MySQL索引知识的一些小妙招总结
2021/05/10 MySQL
详解Node.js如何处理ES6模块
2021/05/15 Javascript