使用“Enter”提交偏好设置表单会原生提交表单

main discourse (61e0db0e80) 上,当使用“回车”提交用户偏好设置表单时(例如:更改名称后),表单会以原生方式发送。

这会导致向同一页面发出 GET 请求,并且数据库中没有保存任何更改。

重现步骤:

  1. 访问偏好设置页面
  2. 填写/更改名称
  3. 按下回车键
  4. 页面重新加载。

我在这里(meta)无法重现,刚试过,运行正常。

您能在这里也验证一下吗?

好的,我能够在以下环境中重现它:

  • Firefox ESR v140.5.0esr - 64 位,使用_干净的用户配置文件_(无插件,无自定义配置)
  • Chromium v142.0.7444.175,所有插件禁用

我正在运行 Debian 13,两个浏览器都来自 Debian 存储库。

1 个赞

很奇怪,我在我的浏览器(Firefox 45.0.2/Chromium: 143.0.7499.40)中无法重现

当你说

这让我想你没有在 Meta 上测试?

FWIW 我可以在 meta 上重现这个问题 :raised_hand:

当我输入我的名字然后按“回车”时,页面会重新加载并清空该值。

我猜想因为它在页面重新加载之前还没有来得及按那个按钮,所以没有保存任何更改?

预计到达时间 (ETA): 似乎在 Firefox 和 Chrome(在桌面/Windows 上)中都会发生这种情况。

1 个赞

好的,很高兴知道。我奇怪为什么我无法重现:confused:

没主意 :man_shrugging: :slight_smile:

但是,如果你能重现,你会寻找什么?我可以再试一次,看看我是否能为你提供信息。

1 个赞

在干净的 dv 环境中 100% 可重现。

在最新版 Chrome 上:

dv new enter-submit
http://enter-submit.localhost/session/user1/become
访问
http://enter-submit.localhost/u/user1/preferences/account
更改名称
点击回车键

页面重新加载。

对于像这样的情况,@martin / @j.jaffeux/frontend/discourse/app/controllers/preferences.js 中感觉如何:

      
    @action
    preventSubmit(event) {
       event?.preventDefault();
    }
    <form class="form-vertical" {{on "submit" this.preventSubmit}}>
       {{outlet}}
     </section>

在这个非常特殊的情况下,我们有一个实际上不是表单的表单,这有点奇怪。

2 个赞

我的意思是“禁用所有浏览器插件后”(我使用了一堆可能会干扰网站原始行为的东西)

我在 Meta 上和全新的开发环境中都进行了测试。

1 个赞