1. 程式人生 > >jquery中click點選事件巢狀後多次觸發的解決方案

jquery中click點選事件巢狀後多次觸發的解決方案

首先講講我遇到這個問題的時候,我最開始想到的是阻止事件冒泡,想了一下好像沒有什麼關係的,最後決定還是動手做做看,放到專案中試了試確實是沒有什麼關係的,傻眼了怎麼辦,來講講我的親身體驗吧!

產生此種小姑的原因:jQuery中的click事件會累計繫結,所以我們可以在下次點選前先解綁;

1.一個接單的例子
<!DOCTYPE html>
<html>
<head>
	<title></title>
</head>
<style type="text/css">
	#box{
		width: 100px;
		height: 100px;
		border: 1px solid red; 
	}
	#div{
		width: 50px;
		height: 50px;
		border: 1px solid green; 
		margin-left: 25px;
		margin-top: 25px;
	}
</style>
<body>
<div id="box">
	<div id="div">
		
	</div>
</div>
<script type="text/javascript" src="jquery-3.0.0.min.js"></script>
<script type="text/javascript">
	 $("#box").click(function(){
	 	
        $("#div").unbind("click").click(function(){
          alert("內層div");
        });
 }); 
</script>
</body>
</html>


這個例子很簡單,直接在下次下次點選前先解綁即可;但是問題又來了,如果是動態載入的dom的節點上繫結點選事件呢,我們一般解決動態載入也繫結上點解事件一般會用到事件委託,把點選委託到一個不會變的的父級上;在un-click_in裡面動態載入資料,讓資料也具有點選事件;

比如



在說說解綁的事,在一個比較大的專案中會存在很多的類似的事件委託和點選巢狀,如果要都委託到一個div上,一旦下面的事件解綁,那麼原來的其他繫結事件就不復存在,所以我上面連寫三個div就是解決這個問題的,可以把不同的點選事件委託到不同的div上就可,如下圖。


到這裡已經完美解決了;