Heim > Web-Frontend > js-Tutorial > Binden von Ereignissen an dynamisch generierte Tags in JQuery (ausführliches Tutorial)

Binden von Ereignissen an dynamisch generierte Tags in JQuery (ausführliches Tutorial)

亚连
Freigeben: 2018-06-04 17:29:59
Original
2555 Leute haben es durchsucht

Im Folgenden werde ich Ihnen eine Zusammenfassung verschiedener Methoden zum Binden von Ereignissen an dynamisch generierte Tags in JQuery geben. Es hat einen guten Referenzwert und ich hoffe, dass es für alle hilfreich ist.

Ich stoße oft auf die Schwierigkeit, Ereignisse an dynamisch generierte Tags zu binden. Ich habe es selbst kurz getestet und zusammengefasst, und das Fazit lautet wie folgt:

	<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>
Nach dem Login kopieren

Klicken Sie auf die Schaltfläche und ein li-Tag wird zu d2 hinzugefügt. Das ist in Ordnung.

Wenn Sie jedoch die Bind-Methode verwenden, um das li-Tag zu binden, das in Zukunft während der Initialisierung dynamisch generiert wird, ist das Klicken auf das generierte li-Tag ungültig.

Da die Bindemethode Ereignisse nur an das statische Tag-JQ-Objekt binden kann, das bei ihrer Ausführung bereits vorhanden ist, ist sie für zukünftige dynamisch hinzugefügte Tags ungültig.

Derzeit gibt es mehrere Möglichkeiten, dieses Problem zu lösen:

Methode 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>
Nach dem Login kopieren

Diese Methode besteht darin, die nativen JS-Ereignisse zu spleißen, die während des dynamischen Spleißens ausgelöst werden sollen, und dann die Ereignismethode im Skript-Tag zu definieren. Diese Methode kann das Klickereignis von li auslösen. Wenn Sie jedoch Alert($(this).text()) verwenden möchten, das die eigenen Informationen des Etiketts druckt, werden keine Ergebnisse angezeigt. Auch wenn das Etikett statisch gedruckt wird, wird es nicht angezeigt.

Um dieses Problem zu lösen, können Sie die folgenden zwei Methoden verwenden.

Methode 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>
Nach dem Login kopieren

Diese Methode kann das oben genannte Problem lösen. Obwohl es auch die Bind-Methode verwendet, beachten Sie bitte, dass es zuerst das Ziel-Tag-Objekt hat und dann die Bind-Methode aufruft, damit es einfach zu verwenden ist. Und es kann tatsächlich seine eigenen Informationen normal drucken, was erstaunlich ist.

Methode 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>
Nach dem Login kopieren

Das Obige habe ich für alle zusammengestellt Ich hoffe, dass es in Zukunft für alle hilfreich sein wird.

Verwandte Artikel:

Wie verwende ich die globale Eingabeaufforderungsbox-Komponente in Vue?

Wie verwende ich die Front-End-Suche in vue2?

So übergeben Sie Werte von der untergeordneten Komponente an die übergeordnete Komponente in Vue

Das obige ist der detaillierte Inhalt vonBinden von Ereignissen an dynamisch generierte Tags in JQuery (ausführliches Tutorial). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage