1. 程式人生 > >JS中使用for迴圈新增點選事件時,獲取i值及引數異常原因及解決辦法

JS中使用for迴圈新增點選事件時,獲取i值及引數異常原因及解決辦法

遇見此問題,程式碼檢查了n次都沒毛病,但是卻出現下述問題, 坑了我好久,原來是這個原因,記錄避坑!

PS這是js的處理方法, 在jquery中直接用each遍歷元素繫結點選事件即可避免

$('#id').each(function(i){
	$(this).click(function(){
	 alert(i);							
	});
});


比如頁面上有一個ul,數個li,現在給li新增點選事件。

1 2 3 4 5 6 var li = document.getElementsByTagName("li"); for(var i = 0; i < li.length; i++) {
li[i].addEventListener("click",function () { console.log(i); }) }

但是,這樣寫之後我們發現,點選任何一個li,列印的值都為5,這是因為閉包中共用i值,而i的值由於執行for迴圈,都變為了5

為了正常顯示i值,我們可以使用如下方法:

1 2 3 4 5 6 7 for (var i = 0; i < lis.length; i++) { (function(arg){ li[arg].onclick = function(){ console.log(arg);
}; })(i)   }

類似於這樣

1 2 3 4 5 6 7 8 9 10 11 12 var li = document.getElementsByTagName("li"); for(var i = 0; i < li.length; i++) { getConsole(i); } function getConsole(i){ li[i].addEventListener("click"function() { console.log(i); }); }