2つのフォームがある場合、キーを押したフォームにはがあり、最初に送信ボタンが押されています。したがって、これを特別に処理する必要はありません。途中で止めなければなりません。.preventDefault()
がされていないことを当然と仮定すると、
$(window).bind('keypress', function(e){
if ($(e.originalTarget).is(':input') && e.keyCode == 13) {
$( e.originalTarget)
.closest('form')
.find('input[type=submit]:first')
.click();
}
});
:
あなたは、フォーム上で、コードでこれをシミュレートすることができます
$('form').bind('keypress', function(e){
if (e.keyCode == 13) {
$(this).find('input[type=submit]:first').click();
}
});
またはウィンドウ(おおよそ何が起こっているかのデモンストレーションのために)イベントで呼び出されました。
ボトムライン:あなたがイベントを持っている場合は、どのエレメントから来たのか、それがどのフォームに属しているのかを記入することができます。この場合であっても:ここ
<input type="button" value="LOGIN" name="btnLoginOk" onclick="submit();">
submit()
はグローバル関数ですが、それが呼び出されたときに、そのコンテキスト(this
)は要素になりますし、あなたがsubmit(e){ this.form.submit(); }
を行うことができます。ボタンが提出全くされているので、
アプリケーション
ではなく、設計者はonclickの取り扱いのために行っている、と(=「送信」入力 タイプのように)設計されていません。
これは、デザイナーがDOM /フォームイベントを完全に理解しておらず、問題を取り巻く長い道のりです。もう一つの理由は、プログラムが古く、今日のようにこれらのものがかなり安定していない、または適切に文書化されていないときに設計されたものである可能性があります。
この置き換えます。次にフォームのために検出して、いくつかの条件が満たされた場合に入力抑制し、それを必要とするすべてのフォームにキーハンドラを、(追加
<form action="/login/" method="POST">
[...]
<input type="submit" value="LOGIN" name="btnLoginOk">
</form>
:これにより
<form action="/login/" method="POST">
[...]
<input type="button" value="LOGIN" name="btnLoginOk" onclick="submit();">
</form>
をあなたは実際にこれを無効にしたい)。
// for all forms that POST that have 2+ submit buttons
$('form[method=post]:has(:submit:eq(1))').bind('keydown', function(e){
// if target is an enter key, input element, and not a button
if (e.keyCode == 13 && e.target.tagName == 'INPUT' &&
!/^(button|reset|submit)$/i.test(e.target.type)) {
return false; // kill event
}
});
またはもっと良い方法:これを行う方法を知っているフォーム検証ライブラリ(またはjQueryプラグイン)を使用します。
私はあなたがそれの一部を統合することができると思う:$([「入力」、「テキストエリア」、「選択」])フォーカス。 (focus_form).end()。blur(unfocus_form); //その終わりが必要かどうかわからない – Matt
これも私が考えていたものです。 –