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

发布时间 - 2026-01-10 23:24:08    点击率:

先看下面一段代码:

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循环等多个知识点。

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


# js循环添加点击事件  # JS事件循环机制event loop宏任务微任务原理解析  # 详解node.js 事件循环  # 深入分析JavaScript 事件循环(Event Loop)  # Nodejs监控事件循环异常示例详解  # 前端js中的事件循环eventloop机制详解  # 实例分析js事件循环机制  # JS 循环li添加点击事件 (闭包的应用)  # JavaScript事件循环及宏任务微任务原理解析  # 绑定  # 弹出  # 这段  # 多个  # 那段  # 事件中  # 是有  # 也就  # 不太  # 而在  # 很容易  # 不应  # 再去  # 又会  # 会把  # 再多  # 可对  # 可想而知  # 先看  # 值为 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 浅谈Javascript中的Label语句  Laravel如何实现全文搜索功能?(Scout和Algolia示例)  Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布  济南网站建设制作公司,室内设计网站一般都有哪些功能?  如何生成腾讯云建站专用兑换码?  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  如何在Windows环境下新建FTP站点并设置权限?  悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】  英语简历制作免费网站推荐,如何将简历翻译成英文?  Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】  如何在万网利用已有域名快速建站?  Laravel如何使用Gate和Policy进行授权?(权限控制)  jQuery中的100个技巧汇总  如何在IIS中配置站点IP、端口及主机头?  如何用景安虚拟主机手机版绑定域名建站?  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  使用豆包 AI 辅助进行简单网页 HTML 结构设计  JavaScript如何实现音频处理_Web Audio API如何工作?  html如何与html链接_实现多个HTML页面互相链接【互相】  网站页面设计需要考虑到这些问题  详解CentOS6.5 安装 MySQL5.1.71的方法  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  零基础网站服务器架设实战:轻量应用与域名解析配置指南  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】  如何利用DOS批处理实现定时关机操作详解  Android中AutoCompleteTextView自动提示  Laravel如何配置任务调度?(Cron Job示例)  动图在线制作网站有哪些,滑动动图图集怎么做?  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  如何快速搭建二级域名独立网站?  高防服务器如何保障网站安全无虞?  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  清除minerd进程的简单方法  Win11关机界面怎么改_Win11自定义关机画面设置【工具】  如何在Windows服务器上快速搭建网站?  制作电商网页,电商供应链怎么做?  如何在 React 中条件性地遍历数组并渲染元素  如何在腾讯云服务器快速搭建个人网站?  如何快速搭建安全的FTP站点?  jquery插件bootstrapValidator表单验证详解  如何快速启动建站代理加盟业务?  Laravel如何使用Livewire构建动态组件?(入门代码)  制作公司内部网站有哪些,内网如何建网站?  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】  个人摄影网站制作流程,摄影爱好者都去什么网站?  如何在Tomcat中配置并部署网站项目?