--- title: Event.preventDefault() slug: Web/API/Event/preventDefault tags: - API - DOM - Event - Method - Reference - イベント - メソッド translation_of: Web/API/Event/preventDefault ---
{{domxref("Event")}} インターフェースの preventDefault()
メソッドは、{{Glossary("user agent", "ユーザーエージェント")}}に、イベントが明示的に処理されない場合にその既定のアクションを通常どおりに行うべきではないことを伝えます。このイベントは通常、イベントリスナーの1つが {{domxref("Event.stopPropagation", "stopPropagation()")}} または {{domxref("Event.stopImmediatePropagation", "stopImmediatePropagation()")}} を呼び出し、いずれかが一度に伝播を終了しない限り、伝播し続けます。
以下にある通り、preventDefault()
をキャンセル不可のイベントのために呼び出すと、例えば {{domxref("EventTarget.dispatchEvent()")}} をcancelable: true
の指定なく呼び出した場合、効果がありません。
event.preventDefault();
チェックボックスのクリック時、既定の動作ではチェックボックスが切り替わります。この既定の動作を止める方法を以下に示します。
document.querySelector("#id-checkbox").addEventListener("click", function(event) { document.getElementById("output-box").innerHTML += "Sorry! <code>preventDefault()</code> won't let you check this!<br>"; event.preventDefault(); }, false);
<p>Please click on the checkbox control.</p> <form> <label for="id-checkbox">Checkbox:</label> <input type="checkbox" id="id-checkbox"/> </form> <div id="output-box"></div>
{{EmbedLiveSample("Blocking_default_click_handling")}}
次の例は無効なテキスト入力が入力フィールドに到達するのを preventDefault()
で止める方法を示しています。今日では、ネイティブの HTML フォーム検証を代わりに使用する必要があります。
こちらがフォームです。
<div class="container"> <p>Please enter your name using lowercase letters only.</p> <form> <input type="text" id="my-textbox"> </form> </div>
ユーザが無効なキーを押したときに描画する警告ボックスには、CSS を少し使用します。
.warning { border: 2px solid #f39389; border-radius: 2px; padding: 10px; position: absolute; background-color: #fbd8d4; color: #3b3c40; }
そして、こちらがその仕事を行う JavaScript コードです。まず、{{domxref("Element/keypress_event", "keypress")}} イベントを待ち受けします。
var myTextbox = document.getElementById('my-textbox'); myTextbox.addEventListener('keypress', checkName, false);
checkName()
関数は押されたキーを調べ、それを許可するかどうかを決定します。
function checkName(evt) { var charCode = evt.charCode; if (charCode != 0) { if (charCode < 97 || charCode > 122) { evt.preventDefault(); displayWarning( "Please use lowercase letters only." + "\n" + "charCode: " + charCode + "\n" ); } } }
displayWarning()
関数は問題の通知を表示します。これはエレガントな機能ではありませんが、この例の目的のために仕事をしています:
var warningTimeout; var warningBox = document.createElement("div"); warningBox.className = "warning"; function displayWarning(msg) { warningBox.innerHTML = msg; if (document.body.contains(warningBox)) { window.clearTimeout(warningTimeout); } else { // insert warningBox after myTextbox myTextbox.parentNode.insertBefore(warningBox, myTextbox.nextSibling); } warningTimeout = window.setTimeout(function() { warningBox.parentNode.removeChild(warningBox); warningTimeout = -1; }, 2000); }
{{ EmbedLiveSample('Stopping_keystrokes_from_reaching_an_edit_field', 600, 200) }}
イベントフローのいずれかの段階でイベントをキャンセルする途中で preventDefault()
を呼び出すと、通常はブラウザの実装によって処理される既定のアクションが動作しなくなり、結果としてイベントが発生しなくなります。
イベントがキャンセル可能かどうかは {{domxref("event.cancelable")}} を使って確認できます。キャンセル不可能なイベントに対して preventDefault()
を呼び出しても効果はありません。
仕様書 | 状態 | 備考 |
---|---|---|
{{SpecName('DOM WHATWG', '#dom-event-preventdefault', 'Event.preventDefault()')}} | {{ Spec2('DOM WHATWG') }} | |
{{SpecName('DOM2 Events', '#Events-Event-preventDefault', 'Event.preventDefault()')}} | {{ Spec2('DOM2 Events') }} | 初回定義 |
{{Compat("api.Event.preventDefault")}}