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

2016-02-20 00:40 8 1 收藏

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

【 tulaoshi.com - Web开发 】

我们先看一个关于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://www.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

(本文来源于图老师网站,更多请访问http://www.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:闭包很难,很复杂!

来源:http://www.tulaoshi.com/n/20160220/1632375.html

延伸阅读
标签: Web开发
事件处理概述  事件处理是对象化编程的一个很重要的环节,没有了事件处理,程序就会变得很死,缺乏灵活性。事件处理的过程可以这样表示:发生事件 - 启动事件处理程序 - 事件处理程序作出反应。其中,要使事件处理程序能够启动,必须先告诉对象,如果发生了什么事情,要启动什么处理程序,否则这个流程就不能进行...
标签: Web开发
事件是可以被JavaScript侦测到的行为。 事件 JavaScript使我们有能力创建动态页面。事件是可以被JavaScript侦测到的行为。 网页中的每个元素都可以产生某些可以触发JavaScript函数的事件。比方说,我们可以在用户点击某按钮时产生一个onClick事件来触发某个函数。事件在HTML页面中定义。 事件举例: 鼠标点击  页面或图像载入 ...
标签: Web开发
在很多语言的学习中,“事件”都是一个比较难理解,但是又是一个很重要的概念。javascript中的事件处理也是一样,正因为有了事件处理,才会出现Ajax拖动的效果。本文就讨论一下JavaScript中的事件处理,读过之后,您就会知道,很多Ajax框架实现拖动效果的原理了。 一、 IE Event对象 (一)IE Event对象的主要属性和方法 在IE中有一...
标签: Web开发
!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" HTML  HEAD   TITLE New Document /TITLE   META NAME="Generator" CONTENT="EditPlus"   META NAME="Author" CONTENT=""   META NAME="Keywords" CONTENT=""   META NAME="Description" CONTENT=""   script type="text/javascript"  v...
标签: Web开发
本节稍稍深入地讨论关于事件处理的话题,如果你对模式、闭包和面向对象等概念还不太理解,不妨暂且等阅读完相关内容之后再回过头来阅读它,相信你会有很大收获。 1 事件处理模式        在程序设计领域,“事件处理”是一种模式,当一个对象受外部影响而改变状态时,通过消息的方式将这个状态改变...

经验教程

846

收藏

94
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部