1. 程式人生 > >Js迴圈繫結事件處理

Js迴圈繫結事件處理

很多時候我們在開發過程需要for迴圈給元素組繫結js事件,但是直接敲的話,事件響應的效果只能和最後一個元素一樣,如下面的錯誤程式碼:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>js閉包運用</title>
</head>
<body>
	<button>1</button>
	<button>2</button>
	<button>3</button>
	
</body>
</html>
<script>
	var btn=document.getElementsByTagName('button');
	for(var i=0;i<3;i++){
		btn[i].onclick=function(){
			console.log(i);
		}
	}
</script>
這是js閉包的經典運用場景,有多種方法解決它。

第一種,可以利用(function)(),如下改進程式碼:

<script>
	var btn=document.getElementsByTagName('button');
	for(var i=0;i<3;i++){
		(function(val){
			btn[i].onclick=function(){
				console.log(val);
			}
		})(i);
	}
</script>

第二種方法:寫多一個函式,在該函式寫一個閉包,js程式碼如下:

<script>
	var btnshow=function(val){
		return function(){
			console.log(val);
		}
	}
	var btn=document.getElementsByTagName('button');
	for(var i=0;i<3;i++){
		btn[i].onclick=btnshow(i);
	}
	
</script>
第三種 可以利用jquert的$.each()
<script>
	$(function(){
		btn=document.getElementsByTagName('button');
		$.each([0,1,2],function(index,value){
			btn[value].onclick=function(){
				console.log(value);
			}
		})
	})
</script>