JavaScriptでsubmitイベントを設定する方法!

JavaScript

JavaScriptを使って、submitイベントを設定する方法などについて書いています。

submitイベントはフォームが送信される際に実行されるイベントです。
データ送信前のバリデーションや送信するデータを加工したりするときに使えます。

実際に動くサンプルを使いつつ、以下について書いています。

・submitイベントとは?
・submitイベントをつける方法
・submitをコードから実行(発火)する

submitイベントとは?

submitイベントは、フォームが送信される際に実行されるイベントです。
フォームの送信前に動作を制御したり、データのバリデーションを行ったりするために使用されます。

このイベントはフォームの<form>要素に対してのみ発生します。

submitイベントをつける方法

submitイベントをフォームに設定する方法です。
addEventListenerメソッドを使うか、onsubmit属性を使うことでsubmitイベントを設定できます。

addEventListenerを使ってイベントを追加する

formタグに対してaddEventListenerメソッドを使うことで、submitイベントを追加できます。

<!DOCTYPE html>
<html lang="ja">
<head>
    <title>onsubmitサンプル</title>
</head>
<body>
    <form id="myForm">
        <label for="name">名前:</label>
        <input type="text" id="name" name="name" required>
        <button type="submit">送信</button>
    </form>
    <script>
        window.onload = () => {
            const myForm = document.querySelector('#myForm');
            myForm.addEventListener("submit", function(event) {
                event.preventDefault(); // デフォルトの送信動作を停止
                console.log("名前:" + event.target.name.value);
            });
        }
    </script>
</body>
</html>

HTMLの解説

このサンプルではformタグを用意して、名前を入力するテキストボックスと送信ボタンだけの簡単なフォームを作っています。

JavaScriptのほうで、送信ボタンが押されるとsubmitイベントが動作するようにしています。
処理の内容としては、デフォルトの送信処理をキャンセルして、送信内容をログ出力しています。

JavaScriptの解説

scriptタグの中で、フォームに対してのイベントを設定しています。

最初にquerySelectorを使って、フォームタグを取得してaddEventListenerメソッドを呼び出してsubmitイベントを設定しました。
第1引数に渡しているsubmitがイベントになり、第2引数の関数がイベントが発生したときに行う処理です。

イベント処理では、受け取った引数のevent変数からpreventDefaultメソッドを呼び出して、最初にデフォルトの送信動作を停止しています。
これで、送信されなくなります。そのあとに入力された名前をコンソールに出力してみました。

動作を確認する

実際に動作を確認すると、下記のように入力した名前が出力されました。

JavaScriptのsubmitイベントを確認する

このようにして、フォームを送信する前に入力されたデータを確認することができます。
データをバリデーションや加工した後に、送信したい場合は下記のように取得したフォームタグからsubmitメソッドを呼び出すと良いです。

const myForm = document.querySelector('#myForm');
myForm.addEventListener("submit", function(event) {
    event.preventDefault(); // デフォルトの送信動作を停止
    // ---- バリデーションや送信前データ加工など... ----
    myForm.submit(); // フォームを送信する
});

onsubmitを使ってイベントを追加する

submitイベントをonsubmit属性を使用して設定します。
先ほどと同様に簡単なフォームを作成して、デフォルトの送信イベントをキャンセル後に、フォームの入力内容をログに出力しています。

<!DOCTYPE html>
<html lang="ja">
<head>
    <title>onsubmitサンプル</title>
</head>
<body>
    <form id="myForm" onsubmit="handleSubmit(event)">
        <label for="name">名前:</label>
        <input type="text" id="name" name="name" required>
        <button type="submit">送信</button>
    </form>
    <script>
        function handleSubmit(event) {
            event.preventDefault(); // デフォルトの送信動作を停止
            console.log("名前:" + event.target.name.value);
        }
    </script>
</body>
</html>

HTMLの解説

先ほどの例と同じ内容で、簡単なフォームを作成しています。
入力するテキストボックスと送信ボタンを用意しました。

formタグに対して、onsubmit属性を設定して、関数を指定しています。
これで、フォーム送信時にsubmitイベントが発生して、設定した関数が呼び出されます。

JavaScriptの解説

呼び出されるhandleSubmit関数では、event.preventDefaultでデフォルトの送信動作をキャンセルしています。
そのあとに、入力した内容をコンソールログに出力するようにしました。

動作を確認すると、先ほどと同様にデフォルトの送信動作がキャンセルされ、入力された内容がコンソールに出力されます。
このようにonsubmitを使うことで、送信処理される前に、なんらかの処理をすることができます。

submitイベントをコードから実行(発火)する

submitイベントをコードから実行(発火)する方法です。
フォームの送信をフォーム内に置いたボタン以外から行うことができます。

<!DOCTYPE html>
<html lang="ja">
<head>
    <title>submitイベントをフォーム外で実行する</title>
</head>
<body>
    <form id="myForm">
        <label for="name">名前:</label>
        <input type="text" id="name" name="name" required>
    </form>

    <button type="button" id="submitButton" style="margin-top: 50px">フォームの外のボタン</button>
    <script>
        window.onload = () => {
            const submitButton = document.querySelector('#submitButton');

            submitButton.addEventListener("click", function(event) {
                const myForm = document.querySelector('#myForm');
                myForm.submit();
            });
        }
    </script>
</body>
</html>

HTMLの解説

名前を入力するテキストボックスだけの簡単なフォームを用意しました。
通常はフォーム内に送信ボタンを用意して、入力内容を送信しますが、今回のサンプルでは送信ボタンを置いていません。

フォーム外に置いたボタン(submitButton)から、submitイベントを発生させてフォームを送信させます。

JavaScriptの解説

最初にquerySelectorメソッドを呼び出して、フォーム外のボタン(submitButton)を取得しています。

そのあとに取得したボタンに対して、クリック時に処理するようにclickイベントをつけました。
クリックすると、2番前の引数の処理が実行されます。

処理の中でフォームタグ(myForm)を取得し、submitメソッドを呼び出して送信しています。

動作を確認する

実際に動作を確認すると、下記のようにフォームの外に設置したボタンから、フォームが送信されることが確認できました。

submitイベントをフォーム外で実行する

おわりに

今回はJavaScriptのsubmitイベントについて確認していきました。
記事の内容をまとめると、下記のようになります。

・submitイベントはフォーム送信時に発生するイベント。
・addEventListenerとonsubmitでsubmitイベント発生時に何らかの処理ができた。
・submitイベントで受け取った引数から`event.preventDefault()`とすることでデフォルトの送信動作をキャンセルできた。
・フォーム外のコードなどから送信処理したいときには、フォームのsubmitメソッドを呼び出すことで送信できた。

コメント

タイトルとURLをコピーしました