JavaScript的for循环中嵌套一个点击事件的问题解决


Posted in Javascript onMarch 03, 2017

先看下面一段代码:

for(var i=0; i<10; i++) {
 $('#ul').bind('click', function() {
  alert(i)
 })
}

对于这段代码,当点击Id为“ul”的元素时,会出现弹出10个10。为什么会弹出10个10呢?

首先,这段代码中的点击事件不是绑定事件,是jQuery的绑定事件,那么绑定事件和普通事件是有区别的。普通事件中,如果对某一个元素添加多个点击事件,那么,最后一个将会把前面的所有点击事件全部覆盖,只能执行最后一个点击事件;而在绑定事件中,则不一样,在同一个元素上,即使绑定再多的点击事件,都会全部执行。也就是说,普通事件中的onclick只支持单个事件,会被其他onclick事件覆盖,而事件绑定中的点击事件可以添加多个事件而不用担心被覆盖。那么,可想而知,当点击Id为“ul”的元素时,一定会弹出10个弹窗。

如果还是不太明白,那么对代码进行变形之后,就很容易理解了。

其实,上面的那段代码可以变形为以下形式:

// i=0时
$('#ul').bind('click', function() {
  alert(i)
 })
// i=1时
$('#ul').bind('click', function() {
  alert(i)
 })
 
......
 
// i=10时
$('#ul').bind('click', function() {
  alert(i)
 })

扩展:下面这段代码是对上面的那段原始代码的比较,进一步说明普通事件和事件绑定的区别

for(var i=0; i<10; i++) {
 document.getElementById('ul').onclick = function() {
  alert(i)
 }
}

运行结果:弹出一个10

很显然,当触发点击事件时,会弹出10个弹窗。那么,可能又会有疑问?为什么会是10个10呢?不应该是0,1,2,3...10吗?为了解决这个疑惑,可对原始代码进行再次变形:

var i=0
 
$('#ul').bind('click', function() {
  alert(i)
 })
i=1
$('#ul').bind('click', function() {
  alert(i)
 })
 
......
 
i = 9
$('#ul').bind('click', function() {
  alert(i)
 })

原始代码,变形为这样之后,很显然,最终i的值是9,但是根据for循环的原理,在循环到i为9之后,会执行i++,之后再去判断i<10,此时已不满足条件,所以终止循环,最终i值为10。那么自然也就明白,为什么最终结果是10个结果为10的弹窗。

总结:这段代码看似简单,却涵盖了事件绑定、普通事件、for循环等多个知识点。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
google 搜索框添加关键字实现代码
Apr 24 Javascript
深入理解JavaScript系列(10) JavaScript核心(晋级高手必读篇)
Jan 15 Javascript
详解JavaScript函数绑定
Aug 18 Javascript
JS获取和修改元素样式的实例代码
Aug 06 Javascript
利用jsonp跨域调用百度js实现搜索框智能提示
Aug 24 Javascript
js改变html的原有内容实现方法
Oct 05 Javascript
JS实现仿百度文库评分功能
Jan 12 Javascript
JS库之wow.js使用方法
Sep 14 Javascript
vue进行图片的预加载watch用法实例讲解
Feb 07 Javascript
vue移动UI框架滑动加载数据的方法
Mar 12 Javascript
vue 右键菜单插件 简单、可扩展、样式自定义的右键菜单
Nov 29 Javascript
javascript json字符串到json对象转义问题
Jan 22 Javascript
JavaScript控制输入框中只能输入中文、数字和英文的方法【基于正则实现】
Mar 03 #Javascript
angularjs实现下拉列表的选中事件示例
Mar 03 #Javascript
JavaScript数组迭代方法
Mar 03 #Javascript
vue.js的提示组件
Mar 02 #Javascript
js实现功能比较全面的全选和多选
Mar 02 #Javascript
jQuery实现三级联动效果
Mar 02 #Javascript
Spring Boot+AngularJS+BootStrap实现进度条示例代码
Mar 02 #Javascript
You might like
压力如何影响浓缩咖啡品质
2021/03/03 咖啡文化
smarty获得当前url的方法分享
2014/02/14 PHP
js 加载时自动调整图片大小
2008/05/28 Javascript
stream.js 一个很小、完全独立的Javascript类库
2011/10/28 Javascript
JS对象与json字符串格式转换实例
2014/10/28 Javascript
jQuery中each()、find()和filter()等节点操作方法详解(推荐)
2016/05/25 Javascript
Sequelize中用group by进行分组聚合查询
2016/12/12 Javascript
js实现炫酷的左右轮播图
2017/01/18 Javascript
javascript判断回文数详解及实现代码
2017/02/03 Javascript
JS表格组件神器bootstrap table使用指南详解
2017/04/12 Javascript
jquery+ajaxform+springboot控件实现数据更新功能
2018/01/22 jQuery
简化vuex的状态管理方案的方法
2018/06/02 Javascript
详解使用React制作一个模态框
2019/03/14 Javascript
微信小程序登录session的使用
2019/03/17 Javascript
elementUI select组件使用及注意事项详解
2019/05/29 Javascript
Vue formData实现图片上传
2019/08/20 Javascript
微信小程序 获取手机号 JavaScript解密示例代码详解
2020/05/14 Javascript
微信小程序自定义底部弹出框动画
2020/11/18 Javascript
Java 生成随机字符的示例代码
2021/01/13 Javascript
[02:25]专访DOTA2负责人Erik 国际邀请赛暂不会离开西雅
2014/07/21 DOTA
python多进程共享变量
2016/04/06 Python
Python中的迭代器与生成器高级用法解析
2016/06/28 Python
Flask web开发处理POST请求实现(登录案例)
2018/07/26 Python
python读取txt文件并取其某一列数据的示例
2019/02/19 Python
通过python改变图片特定区域的颜色详解
2019/07/15 Python
Django 创建后台,配置sqlite3教程
2019/11/18 Python
Python3 hashlib密码散列算法原理详解
2020/03/30 Python
详解python中GPU版本的opencv常用方法介绍
2020/07/24 Python
用python获取txt文件中关键字的数量
2020/12/24 Python
台湾旅游网站:雄狮旅游网
2017/08/16 全球购物
斯德哥尔摩通票:Stockholm Pass
2018/01/09 全球购物
德国高品质男装及配饰商城:Cultizm(Raw Denim原色牛仔裤)
2018/04/16 全球购物
我看到了用指针调用函数的不同语法形式
2014/07/16 面试题
高三自我鉴定怎么写
2013/10/19 职场文书
护理不良事件检讨书
2014/02/06 职场文书
入党团支部推荐意见
2015/06/02 职场文书