言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

JavaScript辞典

  1. トップページ
  2. JavaScript辞典
  3. HTML要素.dispatchEvent()

HTML要素.dispatchEvent()

対応: DOM Level 2(2000)

HTML要素にイベントをプログラムから発火させるメソッドです。『HTML要素.dispatchEvent()』と『new CustomEvent()』を組み合わせて、カスタムイベントを作成・発火できます。

構文

// イベントを発火する
element.dispatchEvent(イベントオブジェクト);

// カスタムイベントを作成する
var event = new CustomEvent("イベント名", { detail: データ });

// 標準のイベントを作成する
var event = new Event("イベント名");

メソッド・コンストラクタ一覧

メソッド / コンストラクタ概要
dispatchEvent(event)指定したイベントオブジェクトをHTML要素に対して発火します。そのHTML要素に登録されたイベントリスナーが実行されます。
new Event("イベント名")標準のイベントオブジェクトを作成します。『click』『input』などの標準イベントを手動で発火する場合に使用します。
new CustomEvent("イベント名", options)カスタムイベントを作成します。optionsの『detail』プロパティに任意のデータを含めることができ、リスナー側で『event.detail』として参照できます。

サンプルコード

<button id="btn">クリック</button>
<button id="autoBtn">自動クリック</button>
<div id="app"></div>
<p id="output"></p>

同じ処理は次のようにも書けます。

var btn = document.getElementById("btn");
var autoBtn = document.getElementById("autoBtn");
var app = document.getElementById("app");
var output = document.getElementById("output");

// ボタンにクリックイベントを登録する
btn.addEventListener("click", function() {
	output.textContent = "ボタンがクリックされました";
});

// dispatchEvent() で標準イベントを手動で発火する
autoBtn.addEventListener("click", function() {
	var clickEvent = new Event("click");
	btn.dispatchEvent(clickEvent); // btnのクリックリスナーが実行される
});

// カスタムイベントを作成してデータを渡す
app.addEventListener("userLogin", function(e) {
	output.textContent = e.detail.name + "がログインしました";
});

// カスタムイベントを発火し、detailにデータを含める
var loginEvent = new CustomEvent("userLogin", {
	detail: { name: "五条悟", role: "admin" }
});
app.dispatchEvent(loginEvent);

サンプルページはこちら

よくあるミス

ミス1: dispatchEventの前にaddEventListenerを登録していない

『dispatchEvent()』はその時点でHTML要素に登録済みのリスナーだけを実行します。リスナーより先に発火しても何も起きないため、必ずリスナーを登録してから発火します。

var btn = document.getElementById("btn");
// NG: リスナーを登録する前にdispatchEventを呼んでいる
btn.dispatchEvent(new Event("click"));
btn.addEventListener("click", function() {
	console.log("クリックされました"); // 実行されない
});

修正後は次の通りです。

var btn = document.getElementById("btn");
// OK: リスナーを先に登録してからdispatchEventを呼ぶ
btn.addEventListener("click", function() {
	console.log("クリックされました"); // 実行される
});
btn.dispatchEvent(new Event("click"));

ミス2: CustomEventとEventの使い分け

標準の『Event』には『detail』プロパティが存在しないため、データを渡そうとしても『undefined』になります。データをリスナー側に渡したい場合は『detail』プロパティをサポートする『CustomEvent』を使います。

// NG: Eventにはdetailプロパティがないのでundefinedになる
var ev = new Event("userLogin");
document.dispatchEvent(ev);
document.addEventListener("userLogin", function(e) {
	console.log(e.detail); // undefined
});

修正後は次の通りです。

// OK: データを渡すにはCustomEventを使う
var ev = new CustomEvent("userLogin", { detail: { name: "五条悟" } });
document.dispatchEvent(ev);
document.addEventListener("userLogin", function(e) {
	console.log(e.detail.name); // 『五条悟』と出力される
});

概要

『HTML要素.dispatchEvent()』はイベントをプログラムから発火するメソッドです。ユーザーの操作なしにイベントリスナーを実行できるため、テストの自動化やコンポーネント間の通信に活用できます。

『new CustomEvent()』を使うと、独自のイベント名を定義し、『detail』プロパティに任意のデータを含めることができます。リスナー側では『event.detail』でデータを参照できるため、HTML要素間でデータをやり取りする仕組みとして使えます。

『HTML要素.dispatchEvent()』で発火したイベントは、『HTML要素.addEventListener()』で登録したリスナーのみを実行します。ブラウザのデフォルト動作は発生しないため、例えばリンクに対して『click』イベントを発火してもページ遷移は起きません。バブリングを有効にしたい場合は、オプションに『{ bubbles: true }』を指定してください。

対応ブラウザ

Chrome Chrome
49 以降
3 以前 ×
Firefox Firefox
57 以降
1 以前 ×
Safari Safari
18 以降
3 以前 ×
Edge Edge
80 以降
11 以前 ×
IE IE
11 以降
5 以前 ×
Opera Opera
48 以降
8 以前 ×
iOS Safari iOS Safari
18 以降
2 以前 ×
Android Browser Android Browser
37 以降
3 以前 ×
Chrome Android Chrome Android
36 以降
17 以前 ×
Firefox Android Firefox Android
79 以降
3 以前 ×

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