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

(本文来源于图老师网站,更多请访问http://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

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

(本文来源于图老师网站,更多请访问http://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"  
    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的事件:onLoad

Web开发
JavaScript的事件:onLoad

lol偷钱流符文搭配推荐

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

JavaScript事件的理解

Web开发
JavaScript事件的理解

javascript鼠标事件

Web开发
javascript鼠标事件

lolAD刺客新符文搭配推荐

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

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

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

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

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