main discourse (61e0db0e80) において、ユーザー設定フォームを「enter」で送信した際(例:名前を変更した後)、フォームがネイティブに送信されます。
その結果、同じページへの GET リクエストが発生し、データベースに変更は保存されません。
再現手順:
- 設定ページにアクセスする
- 名前を入力/変更する
- enter を押す
- ページがリロードされる。
main discourse (61e0db0e80) において、ユーザー設定フォームを「enter」で送信した際(例:名前を変更した後)、フォームがネイティブに送信されます。
その結果、同じページへの GET リクエストが発生し、データベースに変更は保存されません。
再現手順:
メタでは再現できません。試してみましたが、期待どおりに動作しました。
こちらでも確認していただけますか?
承知いたしました。以下で再現できました。
私は Debian 13 を実行しており、両方のブラウザは Debian リポジトリから取得したものです。
非常に奇妙ですね。私のブラウザ(Firefox 45.0.2/Chromium: 143.0.7499.40)では再現できません。
あなたが次のように言ったとき
それはあなたがMetaでテストしていないことを示唆しています。
ご参考までに、Metaでも再現できました:raised_hand:
名前を入力してから「Enter」を押すと、ページがリロードされ、値が空になります。
まだボタンを押す前にページがリロードされたため、変更が保存されなかった(できなかった)のだと推測します。
推定所要時間(ETA): FirefoxとChromeの両方(デスクトップ/Windows)で発生するようです。
了解しました、参考になります。なぜ再現できないのか不思議です ![]()
見当もつきません
![]()
でも、再現できるとしたら、何を確認したいですか?もう一度試して、情報を提供できるか見てみます。
クリーンな dv 環境で 100% 再現可能です。
最新の Chrome で:
dv new enter-submit
http://enter-submit.localhost/session/user1/become にアクセス
http://enter-submit.localhost/u/user1/preferences/account にアクセス
名前を変更
Enter をクリック
ページがリロードされます。
この件について、/frontend/discourse/app/controllers/preferences.js 内で @martin / @j.jaffeux はどうお考えですか?
@action
preventSubmit(event) {
event?.preventDefault();
}
<form class="form-vertical" {{on "submit" this.preventSubmit}}>
{{outlet}}
</section>
この非常に特殊なケースでは、実際にはフォームではないフォームがあるのは少し奇妙です。
「すべてのブラウザプラグインを無効にした状態」でテストしたという意味です(ウェブサイトの本来の動作を妨害する可能性のあるものをたくさん使っています)。
Metaでも、クリーンな新規開発環境でも両方テストしました。