これは、HTML フォームのデフォルトの送信ボタンはどのように決定されるのですか? に関連しています。
私の Web アプリの設計では、ユーザーはテキスト入力で Enter キーを押してフォームを直接送信できる必要があります。その場合、そのフォームのボタンは他の機能を持っているため、送信されません。デフォルトのボタンの問題を回避するために、keydown
イベントを処理し、フォームをプログラムで送信しました。
これをFirefoxでテストしたところ、フォームの最初のボタンがエンター キーで押されたようです。keydown
簡単な解決策は、イベント ハンドラーでそのボタンを無効にすることです。
ただし、 Chromekeydown
は、無効になっていない最初のボタンをデフォルトのボタンとして「インテリジェントに」選択し、そのボタンがハンドラーによってすぐに無効にされても、そのボタンを使用して送信するようです。
このjsFiddleを使用して効果をテストできます。Firefox では、チェックボックスによって「最初の」ボタンが無効になった後、入力でプレスを入力すると、1 つの送信のみが発生します。Chrome では、両方のボタンが無効になった後でも、キーダウンからの送信とボタンの押下からの送信の 2 つの送信が常に存在します。
これにより、コード内のすべてのキーダウン ハンドラーを変更して false を返すか、すべてのボタン クリックを処理してボタンが無効になっているかどうかを確認する必要があります。どちらも良いコードではないようです。
より良い提案はありますか?