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 相关文章推荐
静态的动态续篇之来点XML
Dec 23 Javascript
页面调用单个swf文件,嵌套出多个方法。
Nov 21 Javascript
JS实现不规则TAB选项卡效果代码
Sep 16 Javascript
JS加载器如何动态加载外部js文件
May 26 Javascript
js实现旋转木马效果
Mar 17 Javascript
浅谈JavaScript find 方法不支持IE的问题
Sep 28 Javascript
vue 使用ref 让父组件调用子组件的方法
Feb 08 Javascript
vue2.0 子组件改变props值,并向父组件传值的方法
Mar 01 Javascript
Vue中保存数据到磁盘文件的方法
Sep 06 Javascript
vue如何限制只能输入正负数及小数
Jul 04 Javascript
浅谈对于“不用setInterval,用setTimeout”的理解
Aug 28 Javascript
JavaScript数组及常见操作方法小结
Nov 13 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中的字符串编码转换(自动识别原编码)
2013/07/02 PHP
ThinkPHP框架使用redirect实现页面重定向的方法实例分析
2018/04/12 PHP
laravel 解决强制跳转 https的问题
2019/10/22 PHP
一个高效的JavaScript压缩工具下载集合
2007/03/06 Javascript
Cookie 注入是怎样产生的
2009/04/08 Javascript
JavaScript是否可实现多线程  深入理解JavaScript定时机制
2009/12/22 Javascript
HTML颜色选择器实现代码
2010/11/23 Javascript
jQuery实现等比例缩放大图片让大图片自适应页面布局
2013/10/16 Javascript
jQuery事件绑定和委托实例
2014/11/25 Javascript
运行Node.js的IIS扩展iisnode安装配置笔记
2015/03/02 Javascript
浅谈setTimeout 与 setInterval
2015/06/23 Javascript
window.onload使用指南
2015/09/13 Javascript
jquery实现简单的遮罩层
2016/01/08 Javascript
JS 实现可停顿的垂直滚动实例代码
2016/11/23 Javascript
从零开始学习Node.js系列教程之基于connect和express框架的多页面实现数学运算示例
2017/04/13 Javascript
如何在AngularJs中调用第三方插件库
2017/05/21 Javascript
详解vue模拟加载更多功能(数据追加)
2017/06/23 Javascript
vue中的event bus非父子组件通信解析
2017/10/27 Javascript
Vue仿今日头条实例详解
2018/02/06 Javascript
Paypal支付不完全指北
2020/06/04 Javascript
详解Python中dict与set的使用
2015/08/10 Python
Python中取整的几种方法小结
2017/01/06 Python
python定时利用QQ邮件发送天气预报的实例
2017/11/17 Python
python把ipynb文件转换成pdf文件过程详解
2019/07/09 Python
Python 3.6 中使用pdfminer解析pdf文件的实现
2019/09/25 Python
8段用于数据清洗Python代码(小结)
2019/10/31 Python
python3.8.1+selenium实现登录滑块验证功能
2020/05/22 Python
python中复数的共轭复数知识点总结
2020/12/06 Python
Django前后端分离csrf token获取方式
2020/12/25 Python
python drf各类组件的用法和作用
2021/01/12 Python
八年级英语教学反思
2014/01/09 职场文书
商业街策划方案
2014/05/31 职场文书
煤矿隐患排查制度
2015/08/05 职场文书
高一地理教学工作总结
2015/08/12 职场文书
Python的flask接收前台的ajax的post数据和get数据的方法
2021/04/12 Python
漫画《催眠麦克风-Dawn Of Divisions》第二卷PV公开
2022/04/05 日漫