批量註冊事件處理函式索引總是最後一個問題解決
如果元素較多的時候,批量註冊事件處理函式是一個非常便利的事情,但是這個操作往往在初學者中會出現一些問題,最為常見的一個就是,批量註冊完畢之後,事件觸發之後,如果按照元素的個數作為索引的話,總是顯示最後一個索引。
先看一段程式碼例項:
[HTML] 純文字檢視 複製程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <script type="text/javascript"> window.onload=function(){ var obox=document.getElementById("box"); var lis=obox.getElementsByTagName("li"); for(var i=0;i<lis.length;i++){ lis[i].onclick=function(){ alert(i); } } } </script> </head> <body> <ul id="box"> <li>螞蟻部落一</li> <li>螞蟻部落二</li> <li>螞蟻部落三</li> <li>螞蟻部落四</li> </ul> </body> </html>
以上程式碼的本意是點選導航欄目的時候能夠彈出對應欄目的索引值,但是彈出的確實欄目的數量。
出現以上問題的原因是,使用for迴圈註冊時間處理函式的時候,全域性變數i的最終值是4,所以最終彈出值是4。
解決方案一:
[HTML] 純文字檢視 複製程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <script type="text/javascript"> window.onload=function(){ var obox=document.getElementById("box"); var lis=obox.getElementsByTagName("li"); for(var i=0;i<lis.length;i++){ lis[i].index=i; lis[i].onclick=function(){ alert(this.index); } } } </script> </head> <body> <ul id="box"> <li>螞蟻部落一</li> <li>螞蟻部落二</li> <li>螞蟻部落三</li> <li>螞蟻部落四</li> </ul> </body> </html>
以上程式碼實現了我們的要求,實現方式非常的簡單,就是將每一次迴圈時i的值賦給當前li的自定義屬性index,彈出值就是當前li的自定義屬性index的值,因為this是指向當前函式呼叫物件。
解決方案二:
[HTML] 純文字檢視 複製程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <script type="text/javascript"> window.onload=function(){ var obox=document.getElementById("box"); var lis=obox.getElementsByTagName("li"); for(var i=0;i<lis.length;i++){ (function(index){ lis[index].onclick=function(){ alert(index) } })(i) } } </script> </head> <body> <ul id="box"> <li>螞蟻部落一</li> <li>螞蟻部落二</li> <li>螞蟻部落三</li> <li>螞蟻部落四</li> </ul> </body> </html>
以上程式碼同樣實現了我們的要求,比較簡單,這裡就不多介紹了。
相關文章
- JavaScript 批量註冊事件處理函式JavaScript事件函式
- for迴圈批量註冊事件處理函式事件函式
- js如何批量註冊事件處理函式JS事件函式
- attachEvent()註冊事件處理函式this指向問題事件函式
- js批量註冊事件處理函式程式碼例項JS事件函式
- javascript批量註冊事件處理函式程式碼例項JavaScript事件函式
- JavaScript 註冊事件處理函式JavaScript事件函式
- 使用for語句批量註冊事件處理函式程式碼例項事件函式
- javascript如何移除註冊的事件處理函式JavaScript事件函式
- js刪除註冊的事件處理函式JS事件函式
- js為物件註冊多個事件處理函式程式碼JS物件事件函式
- jQuery能夠為一個元素註冊多個相同事件處理函式jQuery事件函式
- on()方法一次註冊多個事件處理函式程式碼例項事件函式
- jQuery如何解綁註冊的事件處理函式jQuery事件函式
- 如何為新增的元素註冊事件處理函式事件函式
- js為按鈕註冊點選事件處理函式JS事件函式
- jquery為動態新增元素註冊事件處理函式jQuery事件函式
- jquery註冊事件處理函式常用的幾種方式jQuery事件函式
- 如何實現為window.onload註冊多個事件處理函式事件函式
- javascript刪除註冊的事件處理函式簡單介紹JavaScript事件函式
- jQuery為非同步載入的元素註冊事件處理函式jQuery非同步事件函式
- jQuery為動態新增的按鈕註冊事件處理函式jQuery事件函式
- js動態新增一個按鈕並且註冊事件處理函式程式碼例項JS事件函式
- 為什麼用for迴圈繫結的事件處理函式只有最後一個有效事件函式
- 解決jQuery多個事件處理函式執行的現象jQuery事件函式
- javascript迴圈事件只響應最後一次的問題處理JavaScript事件
- “正在註冊字型”問題解決
- 批處理檔案(bat檔案)註冊dll批量註冊dllBAT
- 如何判斷元素上是否已經註冊指定型別事件處理函式型別事件函式
- 建立聯合函式索引解決top sql效能問題函式索引SQL
- 利用函式索引解決複雜的約束問題函式索引
- 使用for迴圈批量註冊的事件不能正確獲取索引值事件索引
- javascript事件處理函式迴圈批量繫結簡單介紹JavaScript事件函式
- 函式索引的問題函式索引
- echarts 繫結事件處理函式Echarts事件函式
- 首頁 Java事件處理模式 最後完稿。Java事件模式
- 公共事件處理函式js庫事件函式JS
- Spring Ioc原始碼分析系列--Ioc容器註冊BeanPostProcessor後置處理器以及事件訊息處理Spring原始碼Bean事件