神秘的角度行为 - 有些表单在输入时提交,有些则没有

Posted

技术标签:

【中文标题】神秘的角度行为 - 有些表单在输入时提交,有些则没有【英文标题】:Mysterious angular behaviour - Some forms submit on enter, others don't 【发布时间】:2016-12-18 00:28:51 【问题描述】:

我正在处理 Angular 的不一致行为以及它处理表单提交的方式。

我有一个不同形式的项目。当用户处于“只读”模式时,表单没有提交按钮,我希望表单不可提交。

除了在没有提交按钮的情况下在 Enter 上提交的表单之外,大多数表单的行为都是正确的。

我创建了一个具有以下两种形式的 plunkr: 一个表单在输入时不提交,而另一个则提交。

Plunkr 链接:http://embed.plnkr.co/TZEJPVivIUTdtIdGeW9P/

形式几乎相同。我没有发现可能导致这种情况的差异。

你能帮我想想如何调试它吗? 是什么导致了这种行为差异?

【问题讨论】:

“当没有提交按钮时,所有表单都不会提交” 在某些情况下,出于某种原因,这可能是正确的,但一般情况下它是不正确的。 “由于 ng-if 指令,未呈现提交按钮” 在您的示例中没有。 不,在我的示例中,您可以完全删除按钮,表单仍将提交。我看到很多人在 ***s 上询问如何在输入时提交表单,解决方案是随机的 javascript 事件,在这里你有我的简单表单,它以某种方式自行完成 正如我所说:这是预期的行为。准确地说:一种可能的行为,因为它在某种程度上取决于浏览器。 html 规范还要求,如果有提交按钮,但它被禁用,则在输入时不会提交表单。因此,如果在您的示例中 sendingDatatrue,则输入时提交也将不起作用。 你说这是“预期的行为”,但我不相信。所有其他形式的行为都不是这样。那么无论如何,你如何让它在输入时不提交? 软件开发与信念无关。随意阅读 HTML 规范的relevant section。您的问题的答案就是为什么“所有其他形式”的行为不那样的问题的答案。显然这种形式不同的。也许其他人有一个禁用的提交按钮或捕获按键事件。 【参考方案1】:

我发现这种不一致行为的原因是表单中存在不可见的输入项:

<!-- fake fields are a workaround for chrome autofill getting the wrong fields -->
<input style="display: none" type="password" name="fakepasswordremembered">

谜团解开

【讨论】:

以上是关于神秘的角度行为 - 有些表单在输入时提交,有些则没有的主要内容,如果未能解决你的问题,请参考以下文章

移动端回车键触发表单提交及相关兼容

即使在表单活动验证状态下,如何仅在提交时验证角度表单

角度模糊验证阻止提交单独的表单

Vuejs表单未在“输入”时提交

form 表单处理

表单验证学习