JavaScriptでフォーム送信時のページ再読み込みを防ぐ方法
はじめに
HTMLフォームをユーザーが送信した際、通常ブラウザは自動的にページを再読み込みします。しかし、クライアント側でsubmitイベントを処理したい場合、このデフォルトの動作は邪魔になります。本記事では、JavaScriptを使ってフォーム送信時のページリロードを防ぐ方法を解説します。
対象となるHTMLフォーム
まず、以下のようなシンプルなメールアドレス入力フォームを例に考えます。
<form name="formcontact1" action="#">
<input
type='text'
name='email'
size="36"
placeholder="Your e-mail :)"/>
<input
type="submit"
name="submit"
value="SUBMIT"
onclick="ValidateEmail(document.formcontact1.email)"
/>
</form>このままでは、SUBMITボタンをクリックするとブラウザがページを再読み込みしてしまいます。そこで、クライアント側でイベントを処理し、再読み込みを防止する必要があります。
preventDefault()メソッドによる解決策
最も簡単かつ確実な方法は、フォームのonclick属性から呼び出しているValidateEmail()関数の先頭に、event.preventDefault()を追加することです。
function ValidateEmail(event, inputText){
event.preventDefault();
// 残りの関数ロジックをここに記述
}preventDefault()は、イベントに対するブラウザのデフォルト動作(ここではフォーム送信によるページ再読み込み)をキャンセルし、代わりにクライアント側でフォーム送信イベントを処理できるようにするメソッドです。
完全なサンプルコード
以下は、上記の仕組みを実装した完全なHTMLコードです。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form name="formcontact1" action="#">
<input
type='text'
name='email'
size="36"
placeholder="Your e-mail :)"/>
<input
type="submit"
name="submit"
value="SUBMIT"
onclick="ValidateEmail(document.formcontact1.email)"
/>
</form>
<script>
{
function ValidateEmail(event, inputText){
event.preventDefault();
// 残りの関数ロジックをここに記述
}
}
</script>
</body>
</html>addEventListener()を使う代替手法
インラインのonclick属性ではなく、addEventListener()を使ってイベントリスナーを登録する方法も推奨されています。こちらの方がHTMLとJavaScriptを分離でき、コードの保守性が向上します。
document.querySelector('form').addEventListener('submit', function(event) {
event.preventDefault();
// フォーム送信後の処理をここに記述
});まとめ
フォーム送信時のページ再読み込みを防ぐには、イベントオブジェクトのpreventDefault()メソッドを呼び出すのが基本です。これにより、Ajax通信やバリデーションなど、ページ遷移なしでクライアント側の処理を行うことが可能になります。モダンな開発では、インラインイベントハンドラよりもaddEventListener()を利用するアプローチが一般的なので、状況に応じて使い分けるとよいでしょう。
-
JavaScriptでフォーム送信を実装!送信ボタンと入力クリアボタンの作成方法
フォーム送信ボタンと入力クリアボタンの実装 フォームのデータ送信には type=submit のボタンを使用し、テキストボックスなどに入力された内容を消去するためには、クリック時にJavaScript関数を呼び出す別のボタンを設置します。以下のコードでは、「Submit(送信)」ボタンと「Delete(削除)」ボタンの2種類を実装しています。 コード例 <!DOCTYPE html> <html lang=en> <head> <meta charset=UTF-8> <meta name=viewport content=width=de
-
JavaScriptでフォーム送信時の入力値を変更する方法
JavaScriptでフォーム送信時にinput要素の値を変更したい場合は、documentオブジェクトを利用します。フォーム名とテキスト名を指定して、valueプロパティに新しい値を代入するだけで簡単に実現できます。基本構文入力値を変更するための基本構文は以下の通りです。document.yourFormName.yourTextName.value=anyValue;この構文では、「yourFormName」にフォームのname属性の値、「yourTextName」にinput要素のname属性の値を指定し、「anyValue」に設定したい新しい値を代入します。フォームの例ここでは、「Su