HTMLフォームフィールドにフォーカスがあり、Enterキーを押すと、フォームが送信されます(それを回避するために特別なことを行った場合を除く)。ただし、奇妙なことに、JavaScriptがフォームにフィールドを追加すると、その入力から送信までの動作が壊れているように見えます。例えば:
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」の単一のフィールドを持つフォームが表示されます。それをクリックしてEnterキーを押すと、フォームが送信されます(「OK」アラートが表示されたら、JSFiddleは投稿しないように指示します!)。
ただし、[ガチョウを追加]をクリックすると、新しいフィールドが表示されます。そして今、あなたはフォームを提出するためにEnterを押すことができません。
なぜこうなった?私はグーグルでこの振る舞いについて何も見つけることができません、おそらく私は間違った検索用語を使用しています。しかし、少なくともWindowsとChromeのIEとOSXのFFで発生します。したがって、それは意図的な、おそらく仕様に合わせた動作のように見えます。それはある種のセキュリティ保護ですか?
また、フィールドが挿入された後、フォームの送信への入力動作を復元する方法はありますか?入力フィールドにonkey*イベントを追加する以外の方法はありますか?
FWIW、入力がDOMメソッド(appendChild)を介して追加されるか、jQueryまたは昔ながらのJavaScriptを使用してinnerHTMLを設定するかは問題ではないようです。