Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用enter提交表单在插入输入字段后中断-为什么以及如何修复?_Javascript_Html_Forms - Fatal编程技术网

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

Javascript 使用enter提交表单在插入输入字段后中断-为什么以及如何修复?,javascript,html,forms,Javascript,Html,Forms,如果HTML表单字段具有焦点,并且您点击enter键,那么表单将被提交(除非您做了一些花哨的事情来绕过它)。奇怪的是,如果JavaScript在表单中添加了一个字段,那么enter-to-submit行为似乎会中断。例如: 函数goose(){ document.getElementById(“addhere”).innerHTML=“”; } 函数检查表(){ 警报(“正常”); }​ -- 加一只鹅 ​ (这是一个精心设计的示例,试图尽可能简洁。涉及的原始代码是更现代的代码,带有Java

如果HTML表单字段具有焦点,并且您点击enter键,那么表单将被提交(除非您做了一些花哨的事情来绕过它)。奇怪的是,如果JavaScript在表单中添加了一个字段,那么enter-to-submit行为似乎会中断。例如:

函数goose(){
document.getElementById(“addhere”).innerHTML=“”;
}
函数检查表(){
警报(“正常”);
}​
--
加一只鹅
​ (这是一个精心设计的示例,试图尽可能简洁。涉及的原始代码是更现代的代码,带有JavaScript中附加的事件等。但这是复制问题的最简单代码。此外,在实际用例中,有必要通过添加/删除字段来动态修改表单。)

无论如何,您将得到一个表单,该表单有一个值为“duck”的字段。点击它并点击enter,表单将提交(您将看到一个“ok”警报,然后JSFIDLE将告诉您不要发布!)

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

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

而且,一旦插入字段,是否有任何方法可以恢复表单上的enter to submit行为?除了将onkey*事件添加到输入字段之外的其他方法


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

这是因为只有当输入是表单上的唯一输入时,才会发生enter to submit行为

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


看看吧:

神圣的烟雾,这应该是显而易见的。还有一件事我没有尝试!!刚刚意识到您可能需要在该输入上添加tabindex=-1,这样他们就无法在其中添加tab(这可能会让人困惑)。回想起来,这是一个愚蠢的问题-我自己一个!
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>