1

HTMLフォームフィールドにフォーカスがあり、Enterキーを押すと、フォームが送信されます(それを回避するために特別なことを行った場合を除く)。ただし、奇妙なことに、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」の単一のフィールドを持つフォームが表示されます。それをクリックしてEnterキーを押すと、フォームが送信されます(「OK」アラートが表示されたら、JSFiddleは投稿しないように指示します!)。

ただし、[ガチョウを追加]をクリックすると、新しいフィールドが表示されます。そして今、あなたはフォームを提出するためにEnterを押すことができません。

なぜこうなった?私はグーグルでこの振る舞いについて何も見つけることができません、おそらく私は間違った検索用語を使用しています。しかし、少なくともWindowsとChromeのIEとOSXのFFで発生します。したがって、それは意図的な、おそらく仕様に合わせた動作のように見えます。それはある種のセキュリティ保護ですか?

また、フィールドが挿入された後、フォームの送信への入力動作を復元する方法はありますか?入力フィールドにonkey*イベントを追加する以外の方法はありますか?

FWIW、入力がDOMメソッド(appendChild)を介して追加されるか、jQueryまたは昔ながらのJavaScriptを使用してinnerHTMLを設定するかは問題ではないようです。

4

1 に答える 1

2

これは、送信への入力動作は、フォームへの唯一の入力である場合にのみ発生するためです。

フォームにtype=submitの入力を入力することで復元でき、表示されている必要はありません。

それをチェックしてください:http://jsfiddle.net/SChas/10/

于 2012-05-19T00:03:40.510 に答える