ホームページ  >  記事  >  ウェブフロントエンド  >  jqueryで動的に生成されたタグにイベントをバインドする方法

jqueryで動的に生成されたタグにイベントをバインドする方法

php中世界最好的语言
php中世界最好的语言オリジナル
2018-03-14 16:31:501734ブラウズ

今回は、jqueryイベントを動的に生成されたタグにバインドする方法と、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タグをbindメソッドでバインドすることは無効となり、生成されたliタグをクリックしても何も反応しません。

bind メソッドは、実行時にすでに存在する静的タグの 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 つの方法を使用できます。

方法 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>
この方法は上記の問題を解決できます。こちらもbindメソッドを使用していますが、まず対象のタグオブジェクトを持ってからbindメソッドを呼び出すので使いやすいことに注意してください。そして、実際に独自の情報を正常に出力できるのは驚くべきことです。

方法 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 中国語 Web サイトの他の関連記事に注目してください。

推奨書籍:

jQuery でフレームの端に当たると跳ね返るアニメーション効果を作成する方法

jQuery の isPlainObject() メソッドの使用方法

以上がjqueryで動的に生成されたタグにイベントをバインドする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。