>  기사  >  웹 프론트엔드  >  jquery에서 동적으로 생성된 태그에 이벤트를 바인딩하는 방법

jquery에서 동적으로 생성된 태그에 이벤트를 바인딩하는 방법

php中世界最好的语言
php中世界最好的语言원래의
2018-03-14 16:31:501753검색

이번에는 jquery동적으로 생성된 태그에 events를 바인딩하는 방법과 jquery가 이벤트를 동적으로 생성된 태그에 바인딩할 때 어떤 주의사항이 있는지 알아보겠습니다.

동적으로 생성된 태그에 이벤트를 바인딩하는 것은 사용하기 쉽지 않다는 것을 자주 접합니다. 간단히 테스트하고 요약하면 다음과 같습니다.

	<body>
		<!-- 下面是用纯动态方式生成标签 -->
		<p id="d2">
			生成a标签
		</p>
		<p id="d3">
			<input type="button" value="生成a标签" id="btn" />
		</p>
	</body>
	<script>		
		$(function(){
			$('#btn').bind('click', function(event) {
			 /* 在添加标签的同时给添加的标签绑定点击事件 */
			 $("<li>Hello</li>").appendTo("#d2");
 			});
 			
 			///bind方法对于动态添加的标签不好使,只对已经存在的静态标签好用
 			$('li').bind('click', function(event) {
			 alert("haha"); ///根本不会触发这个方法
 			});
		})
	</script>

버튼을 클릭하면 d2에 li 태그가 추가됩니다. .

그러나 초기화 중에 이렇게 하면 나중에 동적으로 생성될 li 태그를 바인딩하기 위해 바인딩 메서드를 사용하는 것은 유효하지 않습니다. 생성된 li 태그를 클릭해도 아무런 반응이 발생하지 않습니다.

바인드 메소드는 실행 시 이미 존재하는 정적 태그 jq 객체에만 이벤트를 바인딩할 수 있으므로 향후 동적으로 추가되는 태그에는 유효하지 않습니다.

현재 이 문제를 해결하는 방법에는 여러 가지가 있습니다.

방법 1:

<body>
		<!-- 下面是用纯动态方式生成标签 -->
		<p id="d2">
			动态生成a标签
		</p>
		<p id="d3">
			<input type="button" value="生成a标签" id="btn"/>
			
		</p>
	</body>
	<script>
		$(function() {
			///点击按钮,给d2动态添加标签
			$('#btn').bind('click', function() {
				/* 在添加标签的同时给添加的标签绑定点击事件 */
				$("<li onclick=&#39;show()&#39;>Hello</li>").appendTo("#d2");
			});
	
		})
	
		function show() {
			alert($(this).text());///这样打印出的是空的,没有任何东西,但是方法是会触发的(不能这样打印自己)
			alert("哈哈");
		}
	</script>

이 방법은 동적 접합 중에 트리거될 기본 js 이벤트를 접합한 다음 이벤트 메서드를 추가하는 것입니다. 스크립트 태그에 있습니다. 이 메소드는 li의 클릭 이벤트를 트리거할 수 있습니다. 그러나 레이블 자체 정보를 인쇄하는 Alert($(this).text())를 사용하려는 경우 결과가 표시되지 않습니다. 라벨이 정적으로 인쇄되더라도 표시되지 않습니다.

이 문제를 해결하려면 다음 두 가지 방법을 사용할 수 있습니다.

방법 2:

	<body>
		<!-- 下面是用纯动态方式生成标签 -->
		<p id="d2">
			生成a标签
		</p>		
		<p id="d3">
			<input type="button" value="生成a标签" id="btn"/>
		</p>
	</body>
	<script>
		$(function(){
			$('#btn').bind('click', function(event) {
			 /* 在添加标签的同时给添加的标签绑定点击事件 */
			 $("<li>Hello</li>").appendTo("#d2").bind('click', function() {
			  /* 显示标签的内容 */
			  alert($(this).text()); ///这种方式也可以正常打印出 hello
			 });
 			}); 			
		})
	</script>

이 방법을 사용하면 위의 문제를 해결할 수 있습니다. 바인드 메소드를 사용하기도 하지만 먼저 대상 태그 객체를 갖고 그 후 바인드 메소드를 호출하므로 사용하기 쉽다는 점에 유의하세요. 그리고 실제로 자신의 정보를 정상적으로 인쇄할 수 있다는 것은 놀라운 일입니다.

방법 3:

<body>
		<!-- 下面是用纯动态方式生成标签 -->
		<p id="d1">
			测试静态标签的绑定方法
		</p>
		<br />		
		<p id="d2">
			动态生成a标签的位置
		</p>
		<p id="d3">
			<input type="button" value="生成a标签" id="btn" />
		</p>
	</body>
	<script>
		$(function(){
			$('#btn').bind('click', function() {
			 /* 在添加标签的同时给添加的标签绑定点击事件 */
			 $("<li>Hello</li>").appendTo("#d2");
 			});			
 			///bind方法对于动态添加的标签不好使,只对已经存在的静态标签好用
 			///用live方法才好用
 			$('li').live('click', function() {
			 alert($(this).text());///注意,用live还可以这样写,结果是正常的
			 alert("haha");
 			}); 			
 			///通过 live() 方法附加的事件处理程序适用于匹配选择器的当前及未来的元素(比如由脚本创建的新元素)
 			$('#d1').live('click', function() {///对于静态和动态创建的标签都好使
			 alert($(this).text());///注意,用live还可以这样写,结果是正常的.这是非常重要的
			 alert("haha");
 			});
		})
	</script>

이 기사의 사례를 읽으신 후 방법을 마스터하셨다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사에 주목하세요!

추천 자료:

jQuery가 프레임 가장자리에 닿을 때 튀어오르는 애니메이션 효과를 만드는 방법

jQuery의 isPlainObject() 메서드 사용 방법

위 내용은 jquery에서 동적으로 생성된 태그에 이벤트를 바인딩하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.