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 打开页面window.location和window.open的区别
Mar 17 Javascript
深入理解javascript作用域和闭包
Sep 23 Javascript
node.js中的emitter.on方法使用说明
Dec 10 Javascript
JAVA四种基本排序方法实例总结
Jul 24 Javascript
jQuery实现的经典滑动门效果
Sep 22 Javascript
jquery+ajax实现注册实时验证实例详解
Dec 08 Javascript
Javascript仿京东放大镜的效果
Mar 01 Javascript
Zepto实现密码的隐藏/显示
Apr 07 Javascript
jQuery初级教程之网站品牌列表效果
Aug 02 jQuery
javascript将list转换成树状结构的实例
Sep 08 Javascript
改变vue请求过来的数据中的某一项值的方法(详解)
Mar 08 Javascript
vue项目中使用bpmn为节点添加颜色的方法
Apr 30 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
QQ登录 PHP OAuth示例代码
2011/07/20 PHP
PHP连接SQLServer2005的实现方法(附ntwdblib.dll下载)
2012/07/02 PHP
注意!PHP 7中不要做的10件事
2016/09/18 PHP
浅谈php和js中json的编码和解码
2016/10/24 PHP
PHP数组生成XML格式数据的封装类实例
2016/11/10 PHP
浅谈thinkphp的nginx配置,以及重写隐藏index.php入口文件方法
2019/10/12 PHP
Laravel 实现Eloquent模型分组查询并返回每个分组的数量 groupBy()
2019/10/23 PHP
复制小说文本时出现的随机乱码的去除方法
2010/09/07 Javascript
Javascript下判断是否为闰年的Datetime包
2010/10/26 Javascript
jquery处理json对象
2014/11/03 Javascript
JavaScript函数参数使用带参数名的方式赋值传入的方法
2015/03/19 Javascript
jQuery基于ajax实现带动画效果无刷新柱状图投票代码
2015/08/10 Javascript
javascript加载xml 并解析各节点的值(实现方法)
2016/10/12 Javascript
浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法
2017/02/06 Javascript
微信小程序 两种为对象属性赋值的方式详解
2017/02/23 Javascript
详解Vuejs2.0 如何利用proxyTable实现跨域请求
2017/08/03 Javascript
node中的cookie的具体使用
2018/09/13 Javascript
微信小程序 (地址选择1)--选取搜索地点并显示效果
2019/12/17 Javascript
解决echarts图表使用v-show控制图表显示不全的问题
2020/07/19 Javascript
Vant 中的Toast设置全局的延迟时间操作
2020/11/04 Javascript
[01:11]steam端dota2实名认证操作流程视频
2021/03/11 DOTA
Python连接DB2数据库
2016/08/27 Python
python读取文本中数据并转化为DataFrame的实例
2018/04/10 Python
Python3获取拉勾网招聘信息的方法实例
2019/04/03 Python
python找出一个列表中相同元素的多个索引实例
2019/06/11 Python
Python学习笔记之迭代器和生成器用法实例详解
2019/08/08 Python
Win下PyInstaller 安装和使用教程
2019/12/25 Python
Django中modelform组件实例用法总结
2020/02/10 Python
介绍一下你对SOA的认识
2016/04/24 面试题
致长跑运动员广播稿
2014/01/31 职场文书
社区巾帼文明岗事迹材料
2014/06/03 职场文书
大学生就业求职信
2014/06/12 职场文书
体育课外活动总结
2014/07/08 职场文书
教师工作自我鉴定范文
2014/09/14 职场文书
民事诉讼代理授权委托书范本
2014/10/08 职场文书
2015年基层党支部工作总结
2015/05/21 职场文书