この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:7
ページ更新者:T
更新日時:2026-06-11 07:07:02

タイトル: 確認ウィンドウを表示する方法
SEOタイトル: JavaScript 確認ダイアログ完全ガイド (confirm / alert / prompt / dialog)

この記事の要点
  • alert("メッセージ") = 通知ダイアログ (OK のみ)
  • confirm("よろしいですか?") = OK / Cancel の 2 択、戻り値 true / false
  • prompt("入力してください", "初期値") = 入力ダイアログ、戻り値 string or null
  • これらは UI を完全ブロックするため現代の SPA では非推奨 → カスタムモーダル推奨
  • 推奨代替: HTML 要素 (ネイティブ) / SweetAlert2 / Bootstrap Modal

3 つのネイティブダイアログ

// 1. alert: 通知 (OK ボタンのみ)
alert('保存しました');
// 戻り値: undefined

// 2. confirm: 確認 (OK / Cancel)
const ok = confirm('削除してよろしいですか?');
if (ok) {
    deleteItem();
} else {
    console.log('キャンセルされた');
}
// 戻り値: true (OK) or false (Cancel / Esc / ×)

// 3. prompt: 入力
const name = prompt('お名前を入力してください', '匿名');
if (name !== null) {
    console.log('入力された:', name);
} else {
    console.log('キャンセル');
}
// 戻り値: 入力文字列 or null

典型的な使い方(削除確認)


ネイティブダイアログの問題点

問題詳細影響
UI を完全ブロックJavaScript の実行が停止する (同期的)SPA / アニメーションが止まる
デザイン不可OS / ブラウザのスタイルそのままブランドイメージに合わない
多重表示で「無効化チェック」Chrome は「このサイトの追加ダイアログを禁止」を出す2 回目以降表示されない可能性
モバイル UX が悪いiOS / Android で表示が画面外使い物にならないことも
非同期処理と相性悪いawait の代わりに同期ブロックパフォーマンス低下
iframe では制限クロスオリジン iframe で動かないことも埋め込みウィジェットで失敗

HTML 要素 (推奨)

HTML5 で標準化されたネイティブダイアログ。Promise ベースで非同期処理しやすい:


    

本当に削除しますか?

SweetAlert2 (人気ライブラリ)


React でのカスタムモーダル

import { useState } from 'react';

function ConfirmModal({ open, message, onConfirm, onCancel }) {
    if (!open) return null;
    return (
        

{message}

); } function DeleteButton() { const [open, setOpen] = useState(false); return ( <> { doDelete(); setOpen(false); }} onCancel={() => setOpen(false)} /> ); }

Vue.js でのカスタムモーダル



アクセシビリティ (a11y) 配慮

  • カスタムモーダルには role="dialog" + aria-modal="true"
  • キーボードでフォーカストラップ (Tab が外に出ないように)
  • Esc キーで閉じられるように
  • 背景に aria-hidden="true" をかけて読み上げ阻止
  • ネイティブ これら全部自動でやってくれる

選択指針

シチュエーション推奨
社内ツール / プロトタイプconfirm() でOK
モダンブラウザ対応の Web アプリ 要素
美しいデザイン重視SweetAlert2 / カスタムモーダル
React / Vue / Svelte SPAコンポーネント化されたカスタムモーダル
IE11 サポート(既に終了)jQuery UI Dialog / Bootstrap Modal

FAQ

Q: confirm() で「キャンセル」を Esc キーで返せる?
A: 多くのブラウザで Esc は Cancel (false) 扱い。× ボタンも同じく false。

Q:

はどこから使える?
A: Chrome 37+ / Firefox 98+ / Safari 15.4+。2024 年以降は主要モダンブラウザ全対応

Q: confirm を await 風に書ける?
A: confirm() 自体は同期。await したいなら

や SweetAlert2 のような Promise ベース API を使ってください。