> 웹 프론트엔드 > JS 튜토리얼 > jquery에서 동적으로 생성된 태그에 이벤트 바인딩(자세한 튜토리얼)

jquery에서 동적으로 생성된 태그에 이벤트 바인딩(자세한 튜토리얼)

亚连
풀어 주다: 2018-06-04 17:29:59
원래의
2529명이 탐색했습니다.

아래에서는 jquery를 사용하여 동적으로 생성된 태그에 이벤트를 바인딩하는 여러 가지 방법을 요약하여 공유하겠습니다. 이는 좋은 참조 가치가 있으며 모든 사람에게 도움이 되기를 바랍니다.

동적으로 생성된 태그에 이벤트를 바인딩하는 것이 사용하기 쉽지 않다는 것을 자주 접하게 되는데, 간단하게 테스트해보고 정리해보니 결론은 다음과 같습니다.

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

버튼을 클릭하면 li 태그가 추가됩니다. d2로 할 수 있습니다.

그러나 초기화 중에 이렇게 하면 나중에 동적으로 생성될 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动态添加标签
			$(&#39;#btn&#39;).bind(&#39;click&#39;, 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(){
			$(&#39;#btn&#39;).bind(&#39;click&#39;, function(event) {
			 /* 在添加标签的同时给添加的标签绑定点击事件 */
			 $("<li>Hello</li>").appendTo("#d2").bind(&#39;click&#39;, 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(){
			$(&#39;#btn&#39;).bind(&#39;click&#39;, function() {
			 /* 在添加标签的同时给添加的标签绑定点击事件 */
			 $("<li>Hello</li>").appendTo("#d2");
 			});
 			
 			///bind方法对于动态添加的标签不好使,只对已经存在的静态标签好用
 			///用live方法才好用
 			$(&#39;li&#39;).live(&#39;click&#39;, function() {
			 alert($(this).text());///注意,用live还可以这样写,结果是正常的
			 alert("haha");
 			});
 			
 			///通过 live() 方法附加的事件处理程序适用于匹配选择器的当前及未来的元素(比如由脚本创建的新元素)
 			$(&#39;#d1&#39;).live(&#39;click&#39;, function() {///对于静态和动态创建的标签都好使
			 alert($(this).text());///注意,用live还可以这样写,结果是正常的.这是非常重要的
			 alert("haha");
 			});
		})
	</script>
로그인 후 복사

위 내용은 제가 모든 사람을 위해 정리한 내용입니다. 앞으로 모든 사람에게 도움이 되기를 바랍니다.

관련 기사:

vue에서 전역 프롬프트 상자 구성 요소를 사용하는 방법은 무엇입니까?

vue2에서 프런트 엔드 검색을 사용하는 방법은 무엇입니까?

vue

에서 하위 구성 요소의 값을 상위 구성 요소로 전달하는 방법

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

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿