2020.10.19

jQuery

jQueryのイベントオブジェクトのメソッド(preventDefault・stopPropagation)

デモページはこちら

jQueryのイベントオブジェクトのメソッドであるpreventDefaultとstopPropagationの動作をテストします。また、処理を抜けるreturnやreturn falseとの違いを確認します。

以下のhtmlの構造でテストします。クラス名box01~box06のdivタグが親要素、クラス名link01~link06のaタグが子要素の構造です。

<div class="hover_image_wrap">
	<div class="hover_image">
		<div class="box01">
			<a href="https://tech.brick-plan.jp/category/fade/" class="link01">
				<img src="images/img01.jpg" alt="">
			</a>
		</div>
		<p class="caption_txt">無効化処理なし</p>
	</div>
	<div class="hover_image">
		<div class="box02">
			<a href="https://tech.brick-plan.jp/category/tab/" class="link02">
				<img src="images/img02.jpg" alt="">
			</a>
		</div>
		<p class="caption_txt">aタグのclickイベントでpreventDefault</p>
	</div>
	<div class="hover_image">
		<div class="box03">
			<a href="https://tech.brick-plan.jp/category/fade/" class="link03">
				<img src="images/img01.jpg" alt="">
			</a>
		</div>
		<p class="caption_txt">aタグのclickイベントでstopPropagation</p>
	</div>
	<div class="hover_image">
		<div class="box04">
			<a href="https://tech.brick-plan.jp/category/tab/" class="link04">
				<img src="images/img02.jpg" alt="">
			</a>
		</div>
		<p class="caption_txt">aタグのclickイベントでpreventDefault、stopPropagation</p>
	</div>
	<div class="hover_image">
		<div class="box05">
			<a href="https://tech.brick-plan.jp/category/fade/" class="link05">
				<img src="images/img01.jpg" alt="">
			</a>
		</div>
		<p class="caption_txt">aタグのclickイベントでreturn</p>
	</div>
	<div class="hover_image">
		<div class="box06">
			<a href="https://tech.brick-plan.jp/category/tab/" class="link06">
				<img src="images/img02.jpg" alt="">
			</a>
		</div>
		<p class="caption_txt">aタグのclickイベントでreturn false</p>
	</div>
</div>

全てaタグのclickイベント時の動作です。
無効化処理なしの場合、alertでlink01の表示、子要素から親要素へクリックイベントが伝播(バブリング)されalertでbox01の表示、リンク先へ遷移となります。
aタグのclickイベントでpreventDefaultを指定した場合、alertでlink02の表示、alertでbox02の表示となります。ブラウザの機能であるリンク遷移のイベントは無効になりますが、preventDefault以降の処理とバブリングは有効です。
aタグのclickイベントでstopPropagationを指定した場合、alertでlink03の表示、リンク先へ遷移となります。バブリングのみ無効になるため、alertでbox03は表示されません。
aタグのclickイベントでpreventDefault、stopPropagationを指定した場合、alertでlink04の表示となります。return falseと似ていますが処理を抜ける訳ではないため、aタグのclickイベント内の処理は実行されます。
aタグのclickイベントでreturnを指定した場合、alertでbox05の表示、リンク先へ遷移となります。aタグのclickイベント内の処理を抜けるため、alertでlink05は表示されませんが、バブリングとリンク遷移は有効です。
aタグのclickイベントでreturn falseを指定した場合、alertの表示もリンク先への遷移も発生しません。全ての処理を抜けるためバブリングは発生せず、リンク遷移のイベントも無効になります。

$(function() {
	//無効化処理なし
	$('.link01').on('click',function(e) {
		alert('link01');
	});
	$('.box01').on('click',function(e) {
		alert('box01');
	});
	//aタグのclickイベントでpreventDefault
	$('.link02').on('click',function(e) {
		e.preventDefault();
		alert('link02');
	});
	$('.box02').on('click',function(e) {
		alert('box02');
	});
	//aタグのclickイベントでstopPropagation
	$('.link03').on('click',function(e) {
		e.stopPropagation();
		alert('link03');
	});
	$('.box03').on('click',function(e) {
		alert('box03');
	});
	//aタグのclickイベントでpreventDefault、stopPropagation
	$('.link04').on('click',function(e) {
		e.preventDefault();
		e.stopPropagation();
		alert('link04');
	});
	$('.box04').on('click',function(e) {
		alert('box04');
	});
	//aタグのclickイベントでreturn
	$('.link05').on('click',function(e) {
		return;
		alert('link05');
	});
	$('.box05').on('click',function(e) {
		alert('box05');
	});
	//aタグのclickイベントでreturn false
	$('.link06').on('click',function(e) {
		return false;
		alert('link06');
	});
	$('.box06').on('click',function(e) {
		alert('box06');
	});
});

関連記事

2020.09.09

jQuery

jQueryのCDN読み込み

コンテンツ・デリバリー・ネットワーク(CDN)は、アクセス元から一番近くのキャッシュサーバーへ接続してファイルが提供される仕組みです。jQueryのCDNはjQ…

2020.11.08

jQuery

プラグインを利用せずにjQueryで実装する高さ揃え

デモページはこちら jquery.matchHeight.jsのようなプラグインを利用せず、jQueryのみでhtml要素の高さ揃えを実装します。プラグイン利用…

2020.09.06

jQuery

jQueryプラグイン drawer.jsの使い方

デモページはこちら ハンバーガーメニューが実装できるjQueryプラグイン、drawer.jsの使い方です。使用にはjQuery以外にdrawer.css、is…

2020.09.06

jQuery

jQueryで発生したエラーの対処法

コンソールでjQueryのエラーが発生した場合の対処法です。エラー発生の有無はjQueryのバージョンやfull版・slim版の違いによっても異なります。1系や…

2020.10.04

jQuery

jQueryのtextメソッド・htmlメソッドで要素を取得または変更

デモページはこちら jQueryのtextメソッドとhtmlメソッドで要素を取得または変更します。textメソッドとhtmlメソッドは機能が似ていますが細かい部…

上に戻る