不使用jquery情况下循环添加绑定事件方法
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
.page{border: 1px red solid;}
.up{width:300px;height:50px;}
.a{width:90px;height:50px;float: left;border: 1px pink solid;}
.down1{width:300px;height:200px;border:1px black solid;padding-top: 10px;}
</style>
</head>
<script>
window.onload=function(){
var up=document.getElementsByClassName("a")
var down=document.getElementsByClassName("down1")
console.log(down)
for(var i in up){
up[i].index=i;
down[i].index=i up[i].onmouseover=function(){
//this.style.background="skyblue" console.log(this.index)
for(var j=0;j<down.length;j++){
console.log(down[j].index)
if((this.index)==(down[j].index)){ down[j].style.background="skyblue" } }
}
} } </script>
<body>
<div class="page" style="width: 300px;height:300px;">
<div class="up" id="up">
<div class="a">aaa</div>
<div class="a">bbb</div>
<div class="a">ccc</div>
</div>
<div class="down1" style="display: block;" >qqq</div>
<div class="down1" style="display: none;">www</div>
<div class="down1" style="display: none;">eee</div> </div>
</body>
</html>
以上是一个,下面也是一个:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style>
table{ border-left: 1px solid gray; border-top: 1px solid gray; width: 300px;}
td{ border-bottom: 1px solid gray; border-right: 1px solid gray;}
.hide{ display: none;}
.selected{ border-bottom: 1px solid white;}
</style> <script>
window.onload=function(){ var tr=document.getElementById("table").getElementsByTagName("tr")
var td=tr[0].getElementsByTagName("td") for(var i=0;i<td.length;i++){
td[i].index=i
td[i].onmouseover=function(){
for(var j=1;j<tr.length;j++){
if(this.index+1 == j){
td[j-1].className='selected';
tr[j].className='';
}else{
td[j-1].className='';
tr[j].className='hide';
}
} } }
} </script>
</head>
<body>
<table id="table" border="0" cellpadding="0" cellspacing="0">
<tr>
<td class="selected">aaa</td>
<td>bbb</td>
<td>ccc</td>
</tr>
<tr>
<td colspan="3">a1<br>a2<br>a3</td>
</tr>
<tr class="hide">
<td colspan="3">b1<br>b2<br>b3</td>
</tr>
<tr class="hide">
<td colspan="3">c1<br>c2<br>c3</td>
</tr>
</table>
</body>
</html>
注意到我们在中间都是用了index这个新添加的属性,如果我们不使用这个属性而直接使用i来代替,即24行为if(i+1 == j){
结果就会发现,所有的下半部分内容都被隐藏起来了,而在22和23行之间插入console.log(i)你就会发现i输出结果都是3.
这是因为在绑定事件的时候并不是
i=0-》开始绑定-》将i=0继续代入事件中作为参数-》完成-》继续,并开始下一个循环i=1
而是:
i=0 ->开始绑定事件-》异步绑定事件,同时,i变为1,开始继续绑定事件-》.....
由于绑定事件并不是和i的增加是同步的,即,在i顺序执行的时候,绑定事件被抛出了这一个执行列表,跑到了另一个执行列表当中,而这个异步执行列表的速度有没有原来的快,所以——【当事件开始绑定的时候,循环已经结束,i已经成为了最大值。】
—————————— 抛出 ————————————
i=0 -------》》》 绑定事件1
—————————— ——————————————
i=1 -------》》》 绑定事件2
—————————— ——————————————
i=2 -------》》》 绑定事件3
—————————— ——————————————
.....
.....
(还没完?) 绑定结束
—————————— ——————————————
(赶紧给我) 《《《------ 交还结果
顺序执行表 异步执行表
循序执行很快(毕竟就是循环,几乎是瞬间完成),所以在顺序执行完毕后,异步才慢慢开始绑定,最终将结果加载回来。
不使用jquery情况下循环添加绑定事件方法的更多相关文章
- JQuery在循环中绑定事件的问题详解
JQuery在循环中绑定事件的问题详解 有个页面上需要N个DOM,每个DOM里面的元素ID都要以数字结尾,比如说 ? 1 2 3 <input type="text" nam ...
- jquery的bind跟on绑定事件的区别
jquery的bind跟on绑定事件的区别:主要是事件冒泡: jquery文档中bind和on函数绑定事件的用法: .bind(events [,eventData], handler) .on(ev ...
- jQuery绑定事件方法及区别(bind,click,on,live,one)
第一种方式: ? 1 2 3 4 5 $(document).ready(function(){ $("#clickme").click(function(){ alert(& ...
- jQ给下拉框绑定事件,为什么要绑定在框(select标签)上,而不是绑定在选项(option标签)上
这是我在学习锋利的 jquery 书中 5.1.4 的代码时遇到的一个小问题,源代码如下: <head> <style type="text/css"> * ...
- jquery动态添加元素无法触发绑定事件的解决方案。
jquery动态添加元素无法触发绑定的事件的解决方案. ╭(●`∀´●)╯二狗最近在工作中遇到一个问题,即当用jquery动态添加元素后,发现给动态添加的元素却无法触发事件(╯#-_-)╯╧═╧ ( ...
- JanusGraph :Cassandra作为存储后端的情况下,JanusGraph的安装方法
Cassandra作为存储后端的情况下,JanusGraph的安装方法 Cassandra作为存储后端的情况下,JanusGraph的安装分为四种方式. 分别是: 1.本地服务器模式(这里的服务器指的 ...
- JqueryOn绑定事件方法介绍
JqueryOn绑定事件方法介绍 1. 简介 (1) On()方法在被选及子元素上添加一个或多个事件处理程序 (2) 在jquery 版本1.7起,on()方法是bind(),live()和deleg ...
- 原生JS事件绑定方法以及jQuery绑定事件方法bind、live、on、delegate的区别
一.原生JS事件绑定方法: 1.通过HTML属性进行事件处理函数的绑定如: <a href="#" onclick="f()"> 2.通过JavaS ...
- jquery动态生成html代码绑定事件
今天工作中需要在页面动态生成html代码,但发现新生成的代码的click事件失效了(非动态生成的代码已经绑定了click事件),于是在网上找了很多解决办法,很多都比较复杂,且使用的jquery都比较老 ...
随机推荐
- 主引导记录MBR/硬盘分区表DPT/主分区、扩展分区和逻辑分区/电脑启动过程
主引导扇区主引导扇区位于整个硬盘的0柱面0磁头1扇区{(柱面,磁头,扇区)|(0,0,1)},bios在执行自己固有的程序以后就会jump到MBR中的第一 条指令.将系统的控制权交由mbr来执行.主引 ...
- HTML meta viewport属性
什么是Viewport 手机浏览器是把页面放在一个虚拟的“窗口”(viewport)中,通常这个虚拟的“窗口”(viewport)比屏幕宽,这样就不用把每个网页挤到很小的窗口中(这样会破坏没有针对手机 ...
- zookeeper删除kafka元数据
问题:卸载kafka前未删除kafka topic,重新安装kafka后,生成跟之前topic名字相同的topic时报错,显示topic已存在 [root@d96 ~]# kafka-topics - ...
- 间隔Ns请求某函数并且有timeout
实现方案: 1. 递归调用 2.timer:apply_interval() 3.gen_server来写 时间timeout怎么实现: 1.开始时间存入ets表中 2.put,get方法放入进程字典 ...
- [HMLY]7.iOS MVVM+RAC 从框架到实战
1.MVVM浅析 MVC是构建iOS App的标准模式,是苹果推荐的一个用来组织代码的权威范式,市面上大部分App都是这样构建的,具体组织模式不细说,iOS入门者都比较了解(虽然不一定能完全去遵守), ...
- npoi导入--从varchar数据类型到datetime数据类型转换产生一个超出范围的值问题
一,导入问题如图: 二,解决方法和原因: 1,经过调试发现导入获取到的日期数据被装换成1/1/10 0:00,如下图: 而将以上的数据插入数据库类型为datatime的列时会报错 2,经过去了解npo ...
- windows下后台运行程序
方法一:使用vbs启动,新建一个vbs脚本,内容如下: set ws=WScript.CreateObject("WScript.Shell") ws.Run 方法二:将程序注册成 ...
- codevs1069关押罪犯(并查集)
题目描述 Description S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极 不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用“怨 ...
- Shell终端收听音乐--豆瓣FM命令行版
douban.fm Terminal-based douban.fm inspired by douban.fm.该版本版基于Python2.* 安装Python2.* pacman -S pytho ...
- noip 2016 提高组题解
前几天写的那个纯属搞笑.(额,好吧,其实这个也不怎么正经) 就先说说day2吧: T1:这个东西应该叫做数论吧. 然而我一看到就照着样例在纸上推了大半天(然而还是没有看出来这东西是个杨辉三角) 然后就 ...