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 document.compatMode兼容性
Feb 23 Javascript
javascript 闭包
Sep 15 Javascript
Jquery遍历checkbox获取选中项value值的方法
Feb 13 Javascript
JQuery仿小米手机抢购页面倒计时效果
Dec 16 Javascript
jQuery实现下滑菜单导航效果代码
Aug 25 Javascript
微信小程序 require机制详解及实例代码
Dec 14 Javascript
vue获取元素宽、高、距离左边距离,右,上距离等还有XY坐标轴的方法
Sep 05 Javascript
详解@angular/cli 改变默认启动端口两种方式
Nov 29 Javascript
手把手教你使用TypeScript开发Node.js应用
May 06 Javascript
Vue使用vue-recoure + http-proxy-middleware + vuex配合promise实现基本的跨域请求封装
Oct 21 Javascript
解决removeEventListener 无法清除监听的问题
Oct 30 Javascript
vue中可编辑树状表格的实现代码
Oct 31 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
Linux下将excel数据导入到mssql数据库中的方法
2010/02/08 PHP
php中常量DIRECTORY_SEPARATOR用法深入分析
2014/11/14 PHP
php获取Google机器人访问足迹的方法
2015/04/15 PHP
PHP实现事件机制的方法
2015/07/10 PHP
php断点续传之文件分割合并详解
2016/12/13 PHP
PHP接口并发测试的方法(推荐)
2016/12/15 PHP
获取URL地址中的文件名和参数的javascript代码
2009/09/02 Javascript
jQuery对象[0]是什么含义?
2010/07/31 Javascript
jQuery的$.proxy()应用示例介绍
2014/04/03 Javascript
NodeJS的Promise的用法解析
2016/05/05 NodeJs
jQuery使用正则表达式限制文本框只能输入数字
2016/06/18 Javascript
省市选择的简单实现(基于zepto.js)
2016/06/21 Javascript
基于jQuery.validate及Bootstrap的tooltip开发气泡样式的表单校验组件思路详解
2016/07/18 Javascript
原生JS实现几个常用DOM操作API实例
2017/01/19 Javascript
利用Vue实现移动端图片轮播组件的方法实例
2017/08/23 Javascript
layui: layer.open加载窗体时出现遮罩层的解决方法
2019/09/26 Javascript
微信小程序可滑动月日历组件使用详解
2019/10/21 Javascript
JS代码简洁方式之函数方法详解
2020/07/28 Javascript
[06:30]DOTA2英雄梦之声_第15期_死亡先知
2014/06/21 DOTA
[01:38]完美世界DOTA2联赛PWL S3 集锦第四期
2020/12/21 DOTA
Python中用Ctrl+C终止多线程程序的问题解决
2013/03/30 Python
python完成FizzBuzzWhizz问题(拉勾网面试题)示例
2014/05/05 Python
python根据开头和结尾字符串获取中间字符串的方法
2015/03/26 Python
python递归计算N!的方法
2015/05/05 Python
python3 tkinter实现点击一个按钮跳出另一个窗口的方法
2019/06/13 Python
python算法与数据结构之冒泡排序实例详解
2019/06/22 Python
Pycharm导入anaconda环境的教程图解
2020/07/31 Python
KOHLER科勒美国官网:国际著名卫浴橱柜领先品牌
2020/06/27 全球购物
英国最受欢迎的母婴精品品牌:JoJo Maman BéBé
2021/02/17 全球购物
市场营销毕业求职信
2014/08/07 职场文书
群众路线教育实践活动的心得体会
2014/09/03 职场文书
校本研修个人总结
2015/02/28 职场文书
毕业设计答辩开场白
2015/05/29 职场文书
golang 实现Location跳转方式
2021/05/02 Golang
JAVA 线程池(池化技术)的实现原理
2022/04/28 Java/Android
nginx之queue的具体使用
2022/06/28 Servers