JavaScript的for循环中嵌套一个点击事件的问题解决
作者:陌年古城 发布时间:2024-04-22 13:01:49
标签:js,点击事件
先看下面一段代码:
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循环等多个知识点。
来源:http://www.cnblogs.com/webhome/p/6491872.html


猜你喜欢
- moviepy官网:https://pypi.org/project/moviepy/是一个用于视频编辑的Python库:切割、连接、标题插
- Python语言的崛起让大家对web、爬虫、数据分析、数据挖掘等十分感兴趣。数据挖掘就业前景怎么样?关于这个问题的回答,大家首先要知道什么是
- 通常我们在vue里面使用别人开发的组件,第一步就是install,第二步在main.js里面引入,第三步Vue.use这个组件。今天我简单的
- 一、不要使用可变对象作为函数默认值In [1]: def append_to_list(value, def_list=[]):
- Django rest_framework serializer.HiddenField(default=serializer.Curren
- 很多用户在网站上会糊弄填写一个电子信箱,请问有什么办法可以阻止这种行为?我们通常用两种方法来进行判断:第一种,设定只有形如aspxhome@
- mssql的每个varchar、text字段都被自动插入一段js代码,即使删除这段代码,如果没有从源头上解决,几分钟后,js代码就又会自动插
- bootstrap中有javascript插件modal也就是对话框,加入拖拽功能,具体内容如下在使用modal时首选需要引用js<l
- 问题:1. 访问 ASP 页面时,出现以下错误:Active Server Pages 错误 'ASP 0201'错误无效的
- 前言本文将教你如何使用YOLOV3对象检测器、OpenCV和Python实现对图像和视频流的检测。用到的文件有yolov3.weights、
- pycharm是编辑python很好使用的工具。下面看看如何安装pycharm工具/原料:pycharm安装包方法/步骤:在网上下载pych
- 今天调试某页面样式,发现chrome下出现问题,但是同样基于webkit引擎的safari没有问题,很是郁闷。于是寻找针对google ch
- 一、准备工作1.1 Python安装包的下载(说明:python版本可根据自己需求更换)官网下载:https://www.python.or
- typora使用latex进行公式的编写,下面是具体的行间公式和行内公式的快捷键方法:CTRL+SHIFT+M开启行间公式$$开启行内公式1
- 让我们先从怎样删除数组中的重复项这个简单问题开始。复杂 - 使用 forEach 删除重复项首先,我们新创建一个空数组,用 forEach(
- 本文实例讲述了java使用正则表达式查找包含的字符串。分享给大家供大家参考,具体如下:Hello.java:package hello;im
- 1.MTV开发模式介绍M:Models 模型(数据)与数据组织相关的功能。组织和存储数据的方法和模式,与数据模型相关的操作。T:Templa
- 前言:python数据类型: python数据结构之数据类型.今天我们主要来介绍一些内置函数,比如输入输出,控制,和异常的用法,尤其是输出和
- python是支持多线程的,并且是native的线程。主要是通过thread和threading这两个模块来实现的。thread是比较底层的
- 如下所示:<!DOCTYPE html><html><head lang="en">