多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > web前端 > jscript > Javascript利用循環綁定事件的例子

Javascript利用循環綁定事件的例子

來源:程序員人生   發布時間:2014-03-14 17:08:52 閱讀次數:3081次

我們先看一個關于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>  
    <title>Untitled 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>

這個例子循環為一組對象綁定事件處理函數。

但是,如果我們在這個基礎上增加一些需求。比如在點擊某一條記錄的時候彈出這是第幾條記錄?

肯能你會理所當然的這么寫:

以下為引用的內容:

<!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>  
    <title>Untitled 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中最難捉摸的地方之一,

看看什么是閉包:
閉包時是指內層的函數可以引用存在與包圍他的函數內的變量,即使外層的函數的執行已經終止。

這個例子中我們可以這樣做:

以下為引用的內容:
<!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>  
    <title>Untitled 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:閉包很難,很復雜!

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 久久亚洲一级α片 | 手机福利视频 | 欧美18videosex性欧 | 免费观看又污又黄网站日本 | 宇都宫紫苑最新作品 | 伊人国产在线 | 最近中文在线国语 | 午夜在线免费观看 | 一级毛片免费观看视频 | 他添的我好湿好爽视频 | 日韩一级片视频 | 午夜视频观看 | 国产第一页视频 | 日本一区二区三区不卡在线视频 | 日本高清中文字幕视频在线 | 7777精品伊人久久久大香线蕉 | 欧美一区二区三区香蕉视 | 欧美色一级| 国内精品久久久久影院亚洲 | 亚洲春色图片 | 精品日韩一区 | 国产一区二区三区夜色 | 国产自约视频 | 中国xxxx做受欧美1314 | 精彩视频在线观看 | 欧美最爽乱淫视频播放黑人 | 欧美肥老太肥50 60 70 | 日韩亚洲国产欧美精品 | 国产色a在线观看 | 欧美日韩性生活视频 | 精品一区二区三区免费 | 欧美一区二区三区精品影视 | 国产精品福利在线观看秒播 | 国产欧美久久精品 | 国产caob| 国产在线a | 91亚洲国产成人久久精品网址 | 国产成人高清精品免费5388密 | 亚洲欧洲高清有无 | 欧美69视频在线 | 在线观看免费精品国自产 |