質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

292閲覧

JSのsubmitについて

tomoharu

総合スコア107

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2019/07/02 02:48

1.JSのsubmitイベントってe.preventDefaultしないと、かならずページがリフレッシュされてしまいますが、あれはなぜでしょうか。
JSの仕様なのでしょうか。。。
2.preventDefaultは挙動を途中でストップさせると勉強したのですが、submit自体は行われるのはなぜでしょうか。。。ストップするならsubmitは途中中断されて行われないのでは。。。と思ったのですが。。。

#HTML <form id="form"> <label>Test field: <input type="text"></label> <br><br> <button type="submit">Submit form</button> </form> <p id="log"></p>
#JS function logSubmit(event) { log.textContent = `Form Submitted! Time stamp: ${event.timeStamp}`; event.preventDefault() } const form = document.getElementById('form'); const log = document.getElementById('log'); form.addEventListener('submit', logSubmit);

何卒よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

x_x

2019/07/02 03:04

「submit自体は行われる」というのは、何をもってそのように判断したのでしょうか?
tomoharu

2019/07/03 05:01

返信が遅れてしまい、申し訳ございません。下記アンサーで納得しましたので大丈夫です。お忙しいなかありがとうございます。
guest

回答2

0

1.JSのsubmitイベントってe.preventDefaultしないと、かならずページがリフレッシュされてしまいますが、あれはなぜでしょうか。

jsの仕様ではなくHTMLの仕様といったほうがいいかもしれません。
「submit」はそもそも「サーバーにフォーム情報を送信する機能」なので、
「submitイベント」を拾った時点でsubmitは開始されています。
そのためpreventDefaultでイベント自体をキャンセルしてあげる必要があります。

→イベントが明示的に処理されない場合に user agent に、そのデフォルトアクションを通常どおりに行うべきではないと伝えます。

2.preventDefaultは挙動を途中でストップさせると勉強したのですが、submit自体は行われるのはなぜでしょうか。。。ストップするならsubmitは途中中断されて行われないのでは。。。と思ったのですが。。。

どこにもsubmitされた情報を取得する処理がないので、「submit自体は行われる」の根拠が今一つ分かりませんが先に書いたように「submitイベントを拾っているから」と思います。

もし「自身が意図したタイミングでsubmitさせたい」のであればbuttonのtypeをbuttonにしてbuttonのクリックイベントを拾い、form.submit()を明示的に書けば良いと思います。

投稿2019/07/02 03:21

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tomoharu

2019/07/03 05:01

返信が遅れてしまい、申し訳ございません。詳細なご回答ありがとうございます。下記アンサーで納得しましたので大丈夫です。お忙しいなかありがとうございます。
m.ts10806

2019/07/03 05:03

「大丈夫です」の意味がよく分かりませんが解決されたようで何よりです
guest

0

ベストアンサー

1.JSのsubmitイベントってe.preventDefaultしないと、かならずページがリフレッシュされてしまいますが、あれはなぜでしょうか。

JSの仕様なのでしょうか。。。

むしろ考え方が逆。
パラメータ付きでページを遷移させることをサブミットといいます。

2.preventDefaultは挙動を途中でストップさせると勉強したのですが、submit自体は行われるのはなぜでしょうか。。。ストップするならsubmitは途中中断されて行われないのでは。。。と思ったのですが。。。

多くのイベントではpreventDefaultするとそのイベントの実行を停止します
submitも同様でサブミットを止めてしまうので、次のページに遷移しないし
パラメータを渡すこともありません。
ただしsubmitを停止した場合、バックグラウンドでajaxなど非同期処理で
submitと同等の処理を入れることは可能です
(バックグラウンド処理なのでページは遷移しません)

投稿2019/07/02 03:17

yambejp

総合スコア114775

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問