<!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情况下循环添加绑定事件方法的更多相关文章

  1. JQuery在循环中绑定事件的问题详解

    JQuery在循环中绑定事件的问题详解 有个页面上需要N个DOM,每个DOM里面的元素ID都要以数字结尾,比如说 ? 1 2 3 <input type="text" nam ...

  2. jquery的bind跟on绑定事件的区别

    jquery的bind跟on绑定事件的区别:主要是事件冒泡: jquery文档中bind和on函数绑定事件的用法: .bind(events [,eventData], handler) .on(ev ...

  3. jQuery绑定事件方法及区别(bind,click,on,live,one)

    第一种方式: ? 1 2 3 4 5 $(document).ready(function(){  $("#clickme").click(function(){  alert(& ...

  4. jQ给下拉框绑定事件,为什么要绑定在框(select标签)上,而不是绑定在选项(option标签)上

    这是我在学习锋利的 jquery 书中 5.1.4 的代码时遇到的一个小问题,源代码如下: <head> <style type="text/css"> * ...

  5. jquery动态添加元素无法触发绑定事件的解决方案。

    jquery动态添加元素无法触发绑定的事件的解决方案. ╭(●`∀´●)╯二狗最近在工作中遇到一个问题,即当用jquery动态添加元素后,发现给动态添加的元素却无法触发事件(╯#-_-)╯╧═╧ ( ...

  6. JanusGraph :Cassandra作为存储后端的情况下,JanusGraph的安装方法

    Cassandra作为存储后端的情况下,JanusGraph的安装方法 Cassandra作为存储后端的情况下,JanusGraph的安装分为四种方式. 分别是: 1.本地服务器模式(这里的服务器指的 ...

  7. JqueryOn绑定事件方法介绍

    JqueryOn绑定事件方法介绍 1. 简介 (1) On()方法在被选及子元素上添加一个或多个事件处理程序 (2) 在jquery 版本1.7起,on()方法是bind(),live()和deleg ...

  8. 原生JS事件绑定方法以及jQuery绑定事件方法bind、live、on、delegate的区别

    一.原生JS事件绑定方法: 1.通过HTML属性进行事件处理函数的绑定如: <a href="#" onclick="f()"> 2.通过JavaS ...

  9. jquery动态生成html代码绑定事件

    今天工作中需要在页面动态生成html代码,但发现新生成的代码的click事件失效了(非动态生成的代码已经绑定了click事件),于是在网上找了很多解决办法,很多都比较复杂,且使用的jquery都比较老 ...

随机推荐

  1. mybatis 入门优化

    在上一节<mybatis快速入门>的基础上对IWebUserDao的实现类进行了优化,暂时命名为WebUserDaoMybatis2.java package com.mozi.dao.i ...

  2. windows环境下解决web服务假死的问题

    最近在windows系统在部署web服务器,发现很不稳定.web服务有容易假死,改过配置换过各种web软件,如apache.nginx都不管用. 所以干脆做个简易的定时检测Web服务状态的软件.一旦w ...

  3. visual studio 2010 无法连接到ASP.NET Development Server

    在点击运行项目时,生成成功.但是页面没有弹出来,弹出个提示框,无法连接到 ASP.NET Development Server. 网上我看到说关闭掉防火墙,可是再关掉防火墙后还是不行.但是其他的项目又 ...

  4. 剑指offer ------ 刷题总结

    面试题3 -- 搜索二维矩阵 写出一个高效的算法来搜索 m × n矩阵中的值. 这个矩阵具有以下特性: 1. 每行中的整数从左到右是排序的. 2. 每行的第一个数大于上一行的最后一个整数. publi ...

  5. 微信小程序-video详解

    在小程序火热的今天,作为IT行业的一员,我也来凑了一下热闹,话不多说了,接下来看看视频上传,和跨页面获取值的相关案例吧!! 视频上传部分代码: 视频播放 随机颜色的产生: 颜色页面的选择:

  6. android 蓝牙连接与通讯(Bluetooth)

    最近做了一个小项目,关于蓝牙的一个智能硬件.其中涉及到了蓝牙模块的操作.特记下蓝牙模块的操作过程.只记录下关于蓝牙部分的操作,具体业务逻辑不涉及其中.重点是记录下蓝牙的扫描.链接.通讯. 在使用蓝牙模 ...

  7. java-读取属性文件

    Property类: public static Properties loadLocalProperties(String fileName) { Properties property = new ...

  8. nyoj 79 拦截导弹 (动态规划)

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=79 题意即求最长单调递减子序列 #include<iostream> #inc ...

  9. PHP定义静态方法的原则

    与实例逻辑无关 与类逻辑有关 静态类本质上跟纯函数没区别. 1.static方法是类中的一个成员方法,属于整个类,即使不用创建任何对象也可以直接调用! 2.静态方法效率上要比实例化高,静态方法的缺点是 ...

  10. 在python上获得随机字符

    """今天写一个程序,在想既然可以获得随机数,那我可不可以获得任意字符呢,于是在stackoverflow.com 上找到了方法,几乎都是用导入random,然后再用其它 ...