1

問題を示すJSFiddle スニペットを次に示します。

imageフォーム内には、非表示のタイプの入力がありますdiv。その非表示divにはclick、アラートをトリガーするイベントがあります(jQueryに添付されています)。同じフォーム内に基本的なテキスト入力もあります。

Chrome では、テキスト入力で Enter キーを押しても何も起こりません。Firefox ではアラートがトリガーされます。つまり、Firefox は非表示の div でクリック イベントをトリガーします。

Chrome と Firefox のどちらが正しい動作を実装しているか、実装していないブラウザでこの問題を回避するにはどうすればよいですか?

4

2 に答える 2

4

フォームに 1 つのテキストを入力して Enter キーを押すと、フォームが送信されます。これは、場合によってはクリック イベントをトリガーすることによって行われます。

Firefox では、フォームのデフォルトの送信コントロールでクリック イベントがトリガーされるようです (そのコントロールが何であれ) (画像入力はデフォルトの送信コントロールになる可能性があります)。

Chrome でも同じことが行われますが、既定の送信コントロールに CSS ボックスがある場合のみです (これがdisplay:noneChrome で問題となる理由です)。

http://www.whatwg.org/specs/web-apps/current-work/multipage/association-of-controls-and-forms.html#implicit-submissionの仕様によると、ここでは CSS に依存するべきではありません。合成クリックのアクティブ化手順は何があっても実行されるため、Chrome の動作は明らかに間違っています。

Firefox に関しては、画像入力が「送信ボタン」であるかどうかが問題です。 http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#image-button-state-%28type=image%29は、実際にはそのため、この場合は Firefox の動作が正しいものです。

form=""回避策として、フォームを送信したくない場合は、画像入力を明示的に設定することが考えられます。これにより、画像がフォームに関連付けられなくなり、デフォルトの送信ボタンではなくなります。

于 2013-10-31T06:25:28.960 に答える