Javascript利用循环绑定事件的例子

anjk332456

anjk332456

2016-02-20 00:40

生活已是百般艰难,为何不努力一点。下面图老师就给大家分享Javascript利用循环绑定事件的例子,希望可以让热爱学习的朋友们体会到设计的小小的乐趣。

我们先看一个关于Javascript利用循环绑定事件的例子:

例如:一个不确定长度的列表,在鼠标经过某一条的时候改变背景。

!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"  
html xmlns="http://www.w3.org/1999/xhtml"   
head  
    titleUntitled Page/title  
/head  
body  
ul id="list"  
li第1条记录/li  
li第2条记录/li  
li第3条记录/li  
li第4条记录/li  
li第5条记录/li  
li第6条记录/li  
/ul  
script type="text/javascript"  
    var list_obj = document.getElementById("list").getElementsByTagName("li"); //获取list下面的所有li的对象数组   
    for (var i = 0; i = list_obj.length; i++) {   
        list_obj[i].onmousemove = function() {   
            this.style.backgroundColor = "#cdcdcd";   
        }   
        list_obj[i].onmouseout = function() {   
        this.style.backgroundColor = "#FFFFFF";   
        }   
    }   
/script  
/body  
/html

这个例子循环为一组对象绑定事件处理函数。

但是,如果我们在这个基础上增加一些需求。比如在点击某一条记录的时候弹出这是第几条记录?

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

肯能你会理所当然的这么写:

!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"  
html xmlns="http://www.w3.org/1999/xhtml"   
head  
    titleUntitled Page/title  
/head  
body  
ul id="list"  
li第1条记录/li  
li第2条记录/li  
li第3条记录/li  
li第4条记录/li  
li第5条记录/li  
li第6条记录/li  
/ul  
script type="text/javascript"  
    var list_obj = document.getElementById("list").getElementsByTagName("li"); //获取list下面的所有li的对象数组   
    for (var i = 0; i = list_obj.length; i++) {   
        list_obj[i].onmousemove = function() {   
            this.style.backgroundColor = "#cdcdcd";   
        }   
        list_obj[i].onmouseout = function() {   
            this.style.backgroundColor = "#FFFFFF";   
        }   
        list_obj[i].onclick = function() {   
            alert("这是第" + i + "记录");   
        }   
    }   
/script  
/body  
/html

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

测试一下你会发现alert出来的都是:这是第6记录
其实这里for循环已将整个列表循环了一遍,并执行了i++,所以这里i变成了6,
有什么好的办法解决这个问题吗?
那就是闭包了,个人认为闭包是js中最难捉摸的地方之一,

看看什么是闭包:
闭包时是指内层的函数可以引用存在与包围他的函数内的变量,即使外层的函数的执行已经终止。

这个例子中我们可以这样做:

!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"  
html xmlns="http://www.w3.org/1999/xhtml"   
head  
    titleUntitled Page/title  
/head  
body  
ul id="list"  
li第1条记录/li  
li第2条记录/li  
li第3条记录/li  
li第4条记录/li  
li第5条记录/li  
li第6条记录/li  
/ul  
script type="text/javascript"  
    function tt(nob) {   
        this.clickFunc = function() {   
        alert("这是第" + (nob + 1) + "记录");   
        }   
    }   
    var list_obj = document.getElementById("list").getElementsByTagName("li"); //获取list下面的所有li的对象数组   
    for (var i = 0; i = list_obj.length; i++) {   
        list_obj[i].onmousemove = function() {   
            this.style.backgroundColor = "#cdcdcd";   
        }   
        list_obj[i].onmouseout = function() {   
            this.style.backgroundColor = "#FFFFFF";   
        }   
        var col = new tt(i);   
        list_obj[i].onclick = col.clickFunc;   
    }   
/script  
/body  
/html  

PS:闭包很难,很复杂!

展开更多 50%)
分享

猜你喜欢

Javascript利用循环绑定事件的例子

Web开发
Javascript利用循环绑定事件的例子

JavaScript For 循环

Web开发
JavaScript For 循环

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

javascript鼠标事件

Web开发
javascript鼠标事件

学习JavaScript的事件

Web开发
学习JavaScript的事件

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

javascript拖动小例子

Web开发
javascript拖动小例子

javascript 事件冒泡

Web开发
javascript 事件冒泡

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

MooTools教程(12):Drag.Move来实现拖放

MooTools教程(12):Drag.Move来实现拖放

MooTools教程(3):数组管理DOM元素

MooTools教程(3):数组管理DOM元素
下拉加载更多内容 ↓