さまざまなアクションを実行する複数の送信ボタンを含む HTML ページにフォームがあります。ただし、ユーザーがテキスト入力に値を入力して Enter キーを押すと、ブラウザは通常、次の送信ボタンが順番にアクティブ化されたかのように動作します。特定のアクションを発生させたいので、私が見つけた解決策の 1 つは、次のように、問題のテキスト入力の直後に HTML に非表示の送信ボタンを配置することでした。
<input type="text" name="something" value="blah"/>
<input type=submit name="desired" value="Save Earth" style="display: none"/>
...
<input type=submit name="something_else" value="Destroy Earth" />
...
<input id="foobar" type=submit name="desired" value="Save Earth" />
これは、Safari や Chrome などの Webkit ブラウザーでは機能しないことを除けば、ほとんどのブラウザーで魅力的に機能します。何らかの理由で、目に見えない送信ボタンをスキップします。Enter キーの押下をインターセプトし、Javascript を使用して適切な送信を有効にする方法を見つけようとしましたが、機能させることができませんでした。キーダウンを傍受し、適切な送信にフォーカスを設定しても機能しません。
ユーザーがHTMLフォームのテキスト入力でEnterキーを押したときに使用される送信ボタンを選択するためにJavascriptなどを使用する方法はありますか?
編集:明確にするために、フォームはJavascriptが基本的に「機能する」ことを要求できません。Webkit ブラウザーで Javascript を使用しないと Enter キーの送信が望ましくないかどうかは気にしませんが、送信ボタンの順序を削除または変更することはできません。
これは私が試したものです。Webkit ブラウザーでの送信動作は変わりません。
うまくいったのは、次のコードのfocus()をclick()に変更することです。
document.onkeypress = processKey;
function processKey(e)
{
if (null == e)
e = window.event ;
if (e.keyCode == 13) {
document.getElementById("foobar").click(); // previously: focus()
}
}
編集:最終的な解決策:
すべてのブラウザーで動作し、必要な場合にのみ Enter キーをインターセプトします。
HTML:
<input type="text" name="something" value="blah"
onkeydown="return processKey(event)" />
<input type=submit name="desired" value="Save Earth" style="display: none"/>
...
<input type=submit name="something_else" value="Destroy Earth" />
...
<input id="foobar" type=submit name="desired" value="Save Earth" />
Javascript:
function processKey(e)
{
if (null == e)
e = window.event ;
if (e.keyCode == 13) {
document.getElementById("foobar").click();
return false;
}
}