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 相关文章推荐
jqTransform form表单美化插件使用方法
Jul 05 Javascript
JavaScript实现获得所有兄弟节点的方法
Jul 23 Javascript
js组件SlotMachine实现图片切换效果制作抽奖系统
Apr 17 Javascript
Jquery基础之事件操作详解
Jun 14 Javascript
JavaScript面向对象编写购物车功能
Aug 19 Javascript
javascript 判断是否是微信浏览器的方法
Oct 09 Javascript
利用纯Vue.js构建Bootstrap组件
Nov 03 Javascript
浅谈Node.js:理解stream
Dec 08 Javascript
利用Angular+Angular-Ui实现分页(代码加简单)
Mar 10 Javascript
es6数组的flat(),flatMap()函数用法实例分析
Apr 18 Javascript
javascript 内存模型实例详解
Apr 18 Javascript
Vue 实现监听窗口关闭事件,并在窗口关闭前发送请求
Sep 01 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 验证图片生成函数
2009/05/21 PHP
使用PHP接收POST数据,解析json数据
2013/06/28 PHP
Linux下PHP安装mcrypt扩展模块笔记
2014/09/10 PHP
php中ltrim()、rtrim()与trim()删除字符空格实例
2014/11/25 PHP
php创建多级目录的方法
2015/03/24 PHP
初识通用数据库操作类――前端easyui-datagrid,form(php)
2015/07/31 PHP
PHP YII框架开发小技巧之模型(models)中rules自定义验证规则
2015/11/16 PHP
EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本
2017/04/04 PHP
PHP实现的mysql操作类【MySQL与MySQLi方式】
2017/10/07 PHP
thinkPHP框架实现生成条形码的方法示例
2018/06/06 PHP
非常不错的一个javascript 类
2006/11/07 Javascript
javascript 贪吃蛇实现代码
2008/11/22 Javascript
表格 隔行换色升级版
2009/11/07 Javascript
xheditor与validate插件冲突的解决方案
2010/04/15 Javascript
JavaScript获取页面上某个元素的代码
2011/03/13 Javascript
jQuery采用连缀写法实现的折叠菜单效果
2015/09/18 Javascript
JavaScript位移运算符(无符号) &gt;&gt;&gt; 三个大于号 的使用方法详解
2016/03/31 Javascript
javascript this详细介绍
2016/09/19 Javascript
Vue 页面跳转不用router-link的实现代码
2018/04/12 Javascript
详解vuex中mapState,mapGetters,mapMutations,mapActions的作用
2018/04/13 Javascript
ES6模板字符串和标签模板的应用实例分析
2019/06/25 Javascript
基于js实现数组相邻元素上移下移
2020/05/19 Javascript
Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果示例
2018/01/29 Python
用python统计代码行的示例(包括空行和注释)
2018/07/24 Python
python使用suds调用webservice接口的方法
2019/01/03 Python
python中pytest收集用例规则与运行指定用例详解
2019/06/27 Python
Python django框架输入汉字,数字,字符生成二维码实现详解
2019/09/24 Python
浅谈python出错时traceback的解读
2020/07/15 Python
Python根据字典的值查询出对应的键的方法
2020/09/30 Python
python3 kubernetes api的使用示例
2021/01/12 Python
使用CSS3的rem属性制作响应式页面布局的要点解析
2016/05/24 HTML / CSS
与C++相比,Java中的数组有什么不同
2014/03/25 面试题
办公室领导干部作风整顿个人整改措施
2014/09/17 职场文书
冰峪沟导游词
2015/02/09 职场文书
党员廉洁自律个人总结
2015/02/13 职场文书
七年级作文之我的梦想
2019/10/16 职场文书