stopPropagation()について
jQueryおよびJavaScriptのstopPropagation()について調べてみました。
1.stopPropagation()とは
stopPropagation()は、現在のイベントの親要素への伝播(propagation)止めるためのメソッドです。
「イベント」とは、分かりやすい例で言うと、フォームのテキストエリアの入力やチェックボックスのチェック、リンクのクリックなどが挙げられます。
stopPropagation()でイベントの伝播がキャンセルされると、テキストエリアの入力やチェックボックスのチェック、リンクのクリックなどのイベントの伝播は行われません。
なお、stopPropagation()でイベントのキャンセル自体は行われません。イベントのキャンセルを行うにはpreventDefault()を利用します。
2.イベント伝播を止めるサンプル
ここではjQueryを使ってイベント伝播のサンプルを作ってみました。
イベント伝播を止めるサンプルのコード(抜粋)は以下となります。
<div id="grandparent">
<div id="parent">
<div id="child">クリックするとアラートを表示</a>
</div>
</div>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
$("div").on("click", function(event){
event.stopPropagation();
alert("クリックされたターゲット要素:" + event.currentTarget.tagName);
});
</script>
一番内側のdiv要素をクリックすると、イベント伝播を止めないサンプルは3回alert()が実行されますが、イベント伝播を止めるサンプルはevent.preventDefault()が実行されているため、alert()は1回しか実行されません。
なお、JavaScriptでイベントを登録する場合は次のようにします。
<div id="grandparent">
<div id="parent">
<div id="child">クリックするとアラートを表示</a>
</div>
</div>
<script>
function myHandler(event){
event.stopPropagation();
alert("クリックされたターゲット要素:" + event.currentTarget.tagName);
}
document.getElementById('child').addEventListener('click', myHandler, false );
document.getElementById('parent').addEventListener('click', myHandler, false );
document.getElementById('grandparent').addEventListener('click', myHandler, false );
</script>
addEventListenerの第3引数にfalseを指定しておくのがポイントです。
Posted by yujiro このページの先頭に戻る
- jQuery+ajaxでモーダルのコンテンツを取得する方法
- jQueryでパスワードの表示・非表示を切り替えるサンプル
- jQueryでファイル選択時にプレビュー表示する方法
- ラジオボタンをjQueryで解除する方法
- テーブルのセルをポイントすると行と列を反転表示するjQueryプラグイン「Table Hover」
- jQueryで親ページからiframeのスクロールバーを非表示にする方法
- jQueryのカスタムビルドが簡単にできるサービス「jQuery Builder」
- jQueryでCSSをまとめて書き換える方法のまとめ
- 親ページからiframe内の要素にCSSを適用させる方法
- jQueryで要素を削除する方法のまとめ
- jQueryでテキストを追加するたびにスクロールさせる方法
- jQuery.ajax()でファイルをアップロードする方法
- preventDefault()で無効にしたイベントを有効にする方法
- jQueryで要素数を取得する方法のまとめ
- jQueryやJavaScriptでパスワードフィールドの文字を表示する方法
トラックバックURL
コメントする
greeting