關於新增元素使用jQuery on()方法重複綁定的問題

最近寫ajax新增元素button綁定click事件的時候發現元素重新添加進來的時候會多執行一次事件函數,找了半天,懷疑是on()的問題,於是測試了一下,果然是因爲on()的使用方式造成了有的新增元素會執行多次綁定事件函數。


當使用$(document).find('target-selector').on(event,function);時,必須在元素每次添加進來之後重新綁定,否則會無效。

而使用$(document).on(event,selector,function);時,只需執行一次綁定即可,可以在開頭就寫好綁定,對後面添加進來的元素都有效,如果在元素每次添加進來之後都綁定,則綁定了幾次,觸發事件的時候就會執行幾次事件函數。


下面是一個測試來說明這個問題(需要jQuery)。

<!DOCTYPE html>
<html>

	<head>
		<meta charset="utf-8" />
		<script type="text/javascript" src="js/jquery-1.11.1.min.js"></script>
		<title>Just a test.</title>
		<style>
			button {
				margin: 10px;
			}
		</style>
		<script>
			$(document).ready(function() {
				$('.addOnTest').click(function() {
					var buttons = '<button class="onTest1">使用.find().on(event,function)的按鈕</button><button class="onTest2">使用.on(event,selector,function)的按鈕</button>';
					$('.test').append(buttons);
				});
				$('.delOnTest').click(function() {
					$('.onTest1').remove();
					$('.onTest2').remove();
				});
				$('.ontest').click(function() {
					$(document).find('.onTest1').on('click', function() {
						alert('111');
					});
					$(document).on('click', '.onTest2', function() {
						alert('222');
					});
				});
			});
		</script>
	</head>

	<body>
		<div class="test">
			<button class="addOnTest">新增兩種類型的按鈕</button>
			<button class="delOnTest">刪除兩種類型的按鈕</button>
			<br />
			<button class="ontest">爲新增按鈕綁定事件</button>
			<br />
		</div>
		<p>測試步驟:
			<br /> 1、點擊“新增兩種類型的按鈕”新增兩個不同類型的按鈕
			<br /> 2、點擊“爲新增按鈕綁定事件”分別爲兩個新增按鈕綁定點擊事件
			<br /> 3、分別點擊新增的兩個按鈕,可以發現,兩個按鈕點擊時都執行了綁定的事件(都有alert)
			<br /> 4、點擊“刪除兩種類型的按鈕”,再點擊“新增兩種類型的按鈕”
			<br /> 5、分別點擊新增的兩個按鈕,可以發現,第一個按鈕不執行綁定事件(沒有alert),第二個按鈕執行了綁定事件(有彈出alert窗口)
			<br /> 6、點擊“爲新增按鈕綁定事件”
			<br /> 7、分別點擊新增的兩個按鈕,可以發現,第一個按鈕執行了一次綁定事件(一個alert),而第二個按鈕執行了兩次(兩個alert)
			<br />
		</p>
	</body>

</html>


所以,對新增的元素,要麼每次都使用.on(event,function);綁定,要麼只要使用$(document).on(event,selector,function);綁定一次就好了。



前端小白渣代碼求輕噴~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章