使用for迴圈批量註冊的事件不能正確獲取索引值
可能不少朋友會遇到一個問題,那就是當使用for迴圈批量註冊事件處理函式,然後最後通過事件處理函式獲取當前元素的索引值的時候會失敗,先看一段程式碼例項:
[HTML] 純文字檢視 複製程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> li{ width:240px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-size:12px; height:30px; } </style> <script type="text/javascript"> window.onload=function(){ var oLis=document.getElementsByTagName("li"); var oshow=document.getElementById("show"); for(var index=0;index<oLis.length;index++){ oLis[index].onclick=function(){ oshow.innerHTML=index; } } } </script> </head> <body> <div id="show"></div> <ul> <li>只有努力奮鬥才會有美好的明天。</li> <li>分享互助是進步最大的源動力。</li> <li>每一天都是新的,要好好珍惜。</li> <li>沒有人一開始就是高手,只有努力才有成長的可能</li> <li">只有當下的時間是可貴的,下一秒都是虛幻的</li> </ul> </body> </html>
在上面的程式碼中,當點選li元素的時候彈出值始終是四,我們本來的想法是,點選li元素在div中顯示當前li元素的索引值,下面就簡單分析一下其中的原因。原因非常的簡單,當for迴圈執行完畢以後,index的值已經變為四,於是也就出現了上面的現象。
程式碼修改如下:
[HTML] 純文字檢視 複製程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> li{ width:240px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-size:12px; height:30px; } </style> <script type="text/javascript"> window.onload=function(){ var oLis=document.getElementsByTagName("li"); var oshow=document.getElementById("show"); for(var index=0;index<oLis.length;index++){ oLis[index]._index=index; oLis[index].onclick=function(){ oshow.innerHTML=this._index; } } } </script> </head> <body> <div id="show"></div> <ul> <li>只有努力奮鬥才會有美好的明天。</li> <li>分享互助是進步最大的源動力。</li> <li>每一天都是新的,要好好珍惜。</li> <li>沒有人一開始就是高手,只有努力才有成長的可能</li> <li">只有當下的時間是可貴的,下一秒都是虛幻的</li> </ul> </body> </html>
上面的程式碼實現了我們的要求,當然也可以使用閉包的方式,程式碼如下:
[HTML] 純文字檢視 複製程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> li{ width:240px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-size:12px; height:30px; } </style> <script type="text/javascript"> window.onload=function(){ var oLis=document.getElementsByTagName("li"); var oshow=document.getElementById("show"); for(var index=0;index<oLis.length;index++){ (function(index){ oLis[index].onclick=function(){ oshow.innerHTML=index; } })(index) } } </script> </head> <body> <div id="show"></div> <ul> <li>只有努力奮鬥才會有美好的明天。</li> <li>分享互助是進步最大的源動力。</li> <li>每一天都是新的,要好好珍惜。</li> <li>沒有人一開始就是高手,只有努力才有成長的可能</li> <li">只有當下的時間是可貴的,下一秒都是虛幻的</li> </ul> </body> </html>
相關文章
- for迴圈批量註冊事件處理函式事件函式
- 迴圈註冊事件的幾種寫法事件
- jquery如何獲取註冊在某個元素上的事件jQuery事件
- JavaScript 批量註冊事件處理函式JavaScript事件函式
- [譯] 使用 closest() 函式獲取正確的 DOM 元素函式
- js如何批量註冊事件處理函式JS事件函式
- 正確使用Java事件通知Java事件
- 獲取本機電腦IP的正確使用方法
- phpstrom 註冊碼獲取PHP
- myeclipse獲取註冊碼Eclipse
- 事件迴圈事件
- 使用for語句批量註冊事件處理函式程式碼例項事件函式
- jQuery如何獲取指定元素的索引值jQuery索引
- 批量註冊事件處理函式索引總是最後一個問題解決事件函式索引
- 圖解MySQL索引(三)—如何正確使用索引?圖解MySql索引
- 論獲取快取值的正確姿勢快取
- 點選事件獲取當前li的索引事件索引
- 如何理解並正確使用 MySQL 索引MySql索引
- jquery註冊文字框獲取焦點清空,失去焦點賦值jQuery賦值
- 使用快取的正確姿勢快取
- SQL優化案例-正確的使用索引(二)SQL優化索引
- Oracle優化案例-正確的使用索引(二)Oracle優化索引
- 微信小程式獲取index索引值的方法微信小程式Index索引
- 最佳化你的系統--索引(一) 正確使用索引索引
- JS事件迴圈JS事件
- 如何正確使用Node.js事件Node.js事件
- Redis 中的事件迴圈Redis事件
- 聊聊Javascript的事件迴圈JavaScript事件
- Node中的事件迴圈事件
- js批量註冊事件處理函式程式碼例項JS事件函式
- javascript批量註冊事件處理函式程式碼例項JavaScript事件函式
- SQL最佳化案例-正確的使用索引(二)SQL索引
- 遞迴遍歷物件獲取value值遞迴物件
- iOS開發-獲取rootViewController的正確方式iOSViewController
- iOS獲取當前控制器的正確方式iOS
- js 註冊事件的兩種方式詳解,傳統註冊事件與方法監聽註冊事件(addEventListener)JS事件dev
- 正確讀取SQL Server中的擴充套件事件SQLServer套件事件
- libuv事件迴圈事件