使用 Enter 提交表单会在插入输入字段后中断 - 原因以及如何修复
Using enter to submit a form breaks after input fields are inserted - why and how to fix?
如果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"的单个字段。 单击它并按回车键,表单将提交(您将看到"确定"警报,然后JSFiddle会告诉您不要发布!
但是,如果您单击"添加鹅",您将获得一个新字段。 现在,您无法按回车键提交表单。
为什么会这样? 我无法通过谷歌找到有关此行为的任何信息,也许我使用了错误的搜索词。 但它至少发生在Windows上的IE和Chrome以及OSX上的FF中。 所以这似乎是一种有意的,也许是规范的行为。 是某种安全保护吗?
而且,插入字段后,有没有办法恢复表单上的输入提交行为? 除了将 onkey* 事件添加到输入字段之外,还有什么方法?
FWIW,输入是通过DOM方法(appendChild(添加的,还是使用jQuery或老式的JavaScript设置innerHTML,似乎并不重要。
这是因为输入提交行为仅在表单上的唯一输入时才发生。
您可以通过在表单上输入 type=submit 来恢复它,它甚至不必可见。
看看:http://jsfiddle.net/SChas/10/
- 我如何修复包含在captcha的addthis中的错误
- 我可以'我似乎不知道如何修复javascript中的两个lint.有人能帮我理解吗
- 自动修复”;语句前缺少分号“;
- 高亮显示与数组字符串一起使用时文本插件中断
- 滚动以修复向上滚动的问题
- AngularJS ui路由器html5模式中断路由
- 递归函数中断
- Javascript-在文本区域中断,但不在段落中中断
- Datatables查询url字符串:需要regex来修复url解析
- 修复选择菜单时的背景图像
- 修复弹出框并使背景滚动
- 修复了使用Jquery的列(表头问题)
- Javascript-修复搜索系统
- “createImageData()”和“new ImageData(()”有何不同
- 在内部映射值时渲染方法中断
- 使用 Enter 提交表单会在插入输入字段后中断 - 原因以及如何修复
- 当锚标记被覆盖时,更改innerHTML会中断parentNode吗?如何修复
- jquery来修复偏移的html锚点,以调整固定的头中断模式
- 损坏的格式工具无法修复它.导致上一个代码块中断
- 为什么这个功能版本的快速排序会中断?我该如何修复它