Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

JavaScript辞典

  1. トップページ
  2. JavaScript辞典
  3. event.preventDefault() / stopPropagation()

event.preventDefault() / stopPropagation()対応: DOM Level 2(2000)

イベントのデフォルト動作をキャンセルする『event.preventDefault()』と、イベントの伝播を停止する『event.stopPropagation()』のメソッドです。

構文
element.addEventListener("イベント名", function(e) {
	// デフォルト動作をキャンセルします。
	e.preventDefault();

	// イベントの伝播を停止します。
	e.stopPropagation();
});
メソッド一覧
メソッド概要
event.preventDefault()ブラウザのデフォルト動作をキャンセルします。リンクのページ遷移やフォームの送信などを抑止できます。イベントの伝播は継続します。
event.stopPropagation()イベントのバブリング(親要素への伝播)を停止します。デフォルト動作はキャンセルされません。
サンプルコード
<a id="link" href="https://example.com">リンク</a>
<form id="form">
	<input type="text" id="name" placeholder="名前">
	<button type="submit">送信</button>
</form>
<div id="outer">
	<div id="inner">内側</div>
</div>
<p id="output"></p>
var output = document.querySelector("#output");

// preventDefault() でリンクのページ遷移をキャンセルします。
var link = document.querySelector("#link");
link.addEventListener("click", function(e) {
	e.preventDefault();
	output.textContent = "ページ遷移がキャンセルされました";
});

// preventDefault() でフォームの送信をキャンセルし、JavaScriptで処理します。
var form = document.querySelector("#form");
form.addEventListener("submit", function(e) {
	e.preventDefault();
	var name = document.querySelector("#name").value;
	output.textContent = "入力された名前: " + name;
});

// stopPropagation() で親要素への伝播を停止します。
var outer = document.querySelector("#outer");
var inner = document.querySelector("#inner");
outer.addEventListener("click", function() {
	output.textContent = "outer がクリックされました";
});
inner.addEventListener("click", function(e) {
	e.stopPropagation(); // 親要素への伝播を停止します。
	output.textContent = "inner がクリックされました";
});
実行結果

リンクをクリックしてもページ遷移は発生しません。

<p id="output">ページ遷移がキャンセルされました</p>

内側のHTML要素をクリックした場合、『event.stopPropagation()』により外側のリスナーは実行されません。

<!-- innerをクリックした場合 -->
<p id="output">inner がクリックされました</p>

<!-- outerをクリックした場合 -->
<p id="output">outer がクリックされました</p>
概要

『event.preventDefault()』はブラウザが持つデフォルトの動作を抑止するメソッドです。例えば、リンクをクリックした時のページ遷移、フォームの送信ボタンを押した時のページリロード、チェックボックスをクリックした時の状態変化など、ブラウザが自動的に行う動作をキャンセルできます。フォームのバリデーションをJavaScriptで行い、問題がなければ手動で送信するという使い方が一般的です。

『event.stopPropagation()』はイベントのバブリングを停止するメソッドです。通常、子要素で発生したイベントは親要素へと順番に伝播しますが、『event.stopPropagation()』を呼ぶとその時点で伝播が停止し、親要素のリスナーは実行されません。

『event.preventDefault()』はデフォルト動作のキャンセルのみで伝播は止めず、『event.stopPropagation()』は伝播の停止のみでデフォルト動作はキャンセルしません。両方を同時に行いたい場合は、2つのメソッドを併用してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。