javascript - 插入输入字段后使用 enter 提交表单中断 - 为什么以及如何修复?

标签 javascript html forms

如果 HTML 表单字段具有焦点并且您按下回车键,表单将被提交(除非您做了一些奇特的事情来绕过它)。奇怪的是,如果 JavaScript 在表单中添加一个字段,则输入到提交的行为似乎会中断。例如:

http://jsfiddle.net/SChas/1/

function goose() { 
  document.getElementById("addhere").innerHTML="<input name=goose value=honk>";
}

function checkForm() {
  alert("ok");
}​

--

<form onsubmit="checkForm();">
  <input name="duck" value="quack">
  <div id="addhere"></div>
  </form>
<button onclick="goose();">add a goose</button>

(这是一个试图尽可能简洁的人为示例。涉及的原始代码是更现代的代码,在 JavaScript 等中附加了事件。但这是复制问题的最简单代码。此外,它 在实际用例中需要通过添加/删除字段来动态修改表单。)

无论如何,您会得到一个表单,其中只有一个字段的值为“duck”。单击它并按回车键,表单将提交(你会看到一个“ok”警告,然后 JSFiddle 会告诉你不要发布!)。

但是,如果您单击“添加一只鹅”,则会得到一个新字段。现在,您无法按回车键提交表单。

为什么会这样?我无法通过谷歌找到有关此行为的任何信息,也许我使用了错误的搜索词。但它至少发生在 Windows 上的 IE 和 OSX 上的 Chrome 和 FF 中。所以这似乎是一种有意的,也许是符合规范的行为。它是某种安全保护吗?

而且,有什么方法可以在插入字段后恢复表单上的输入提交行为吗?除了向输入字段添加 onkey* 事件之外的其他方法?

FWIW,输入是通过 DOM 方法 (appendChild) 添加,还是使用 jQuery 或老式 JavaScript 设置 innerHTML 似乎并不重要。

最佳答案

这是因为只有当它是表单上的唯一输入时才会发生输入提交行为。

您可以通过在表单上输入 type=submit 来恢复它,它甚至不必是可见的。

查看:http://jsfiddle.net/SChas/10/

关于javascript - 插入输入字段后使用 enter 提交表单中断 - 为什么以及如何修复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10661108/

相关文章:

javascript - 需要帮助编写 js 函数来更改调用它的按钮的类

jQuery 方法(.css、.html 等)在内部不起作用

javascript - Nanoscroller 显示无法读取未定义的属性 'style' 为什么?

html - 您可以使用选定的 ="selected"在加载时自动选择 selectize.js 吗?

javascript - AngularJS 表单验证中的 ng-class

javascript - Electron 外部页面错误

javascript - 无间隔停止函数循环

javascript - 如何将Javascript点击功能应用于没有类的元素?

forms - 在 Angular 中以 react 形式更改隐藏字段的值

javascript - D3.js 退出转换 : delay has no effectD3