<!DOCTYPE html>
<html>
<head>
<title>Spring-MVCの散歩道 応用の森(jQuery/JavaScript編)</title>
<meta charset="UTF-8" />
<link rel="stylesheet" type="text/css" href="./css/style.css" />
<link rel="stylesheet" type="text/css" href="./css/popmenu.css" />
<!--[if lt IE 9]>
<script type="text/javascript" src="./js/jquery-1.11.2.js"></script>
<![endif]-->
<!--[if gte IE 9]><!-->
<script type="text/javascript" src="./js/jquery-2.1.3.js"></script>
<!--<![endif]-->
<script type="text/javascript" src="./js/header.js"></script>
<script type="text/javascript">
</script>
</head>
<body class="in_background">
<table class="round">
<tr>
<td class="top left bold cf_title2">
■応用の森 jQuery clickイベントが効かない<br />
</td>
</tr>
<tr>
<td class="top">
jQueryのclick()イベントを使っていると、場合によってはclickイベントがハンドリングできない場合があります。<br/>
HTMLとして最初から書かれている(静的な)セレクタにイベントを設定する場合は、<br/>
click()イベントでなんら問題はありませんが、<br/>
jQueryのappendメソッドなどで、後から動的に追加された要素のセレクタにclick()イベントを設定しても<br/>
イベントがハンドリングできません(クリックしても反応しません)。<br/>
</td>
</tr>
<tr>
<td class="top">
<div class="cl_selector">
<a href="javascript:void(0)" id="id_static">これは静的に記述されたリンクです。クリックしてみてください。</a>
<br/><br/>
</div>
上のリンクをクリックすると、jQueryの $("#id_static").click() イベントが実行され、<br/>
アラートが表示されます。<br/>
<br/>
<button id="id_append">(1)動的セレクタを追加し click()イベントをハンドリングします</button><br/>
<br/>
上のボタンをクリックすると、動的にリンクセレクタが追加されます。<br/>
セレクタクリック時のclick()イベントハンドラを定義していますが、クリックしてもイベントが反応しません。<br/>
<br/>
<button id="id_onappend">(2)動的セレクタを追加し on()イベントをハンドリングします</button><br/>
<br/>
上のボタンをクリックすると、(1)と同様に、動的にリンクセレクタが追加されます。<br/>
こちらはセレクタクリック時のイベントを on()イベントハンドラで停止しているので、<br/>
リンクをクリックするとアラートが表示されます。<br/>
</td>
</tr>
<tr>
<td class="top">
整理すると、<br/>
$(function(){<br/>
$("セレクタ名").click(function () {<br/>
:<br/>
});<br/>
});<br/>
のように定義されたjQueryのclick()イベントメソッドは、<br/>
appendメソッド等で、後から動的に追加された要素に対してはイベントハンドリングができない。<br/>
<br/>
動的に追加される要素がある場合は、click()イベントではなく、<br/>
$(function(){<br/>
$(document).on('click', 'セレクタ名', function () {<br/>
:<br/>
});<br/>
});<br/>
のように、on()イベントで登録しましょう。<br/>
</td>
</tr>
</table>
</body>
</html>
|