これは単純な html です:
<form method="post">
<input type="hidden" name="default_action" value="default_action_value" />
<input type="text" name="count" value="1" />
<input type="submit" value="Button!" />
<button class="btn" type="submit" name="action" value="action value">Button 2!</button>
</form>
と js コード:
(function (window, document, $, undefined) {$(document).ready(function($){
var $doc = $(document);
$doc.on('submit', 'form', function (e) {
console.log('submit form!');
e.preventDefault();
})
.on('click', 'form', function (e) {
console.log('click on form (propagation)!');
})
.on('click', 'form :submit', function (e) {
console.log('click on button!');
});
});})(this, document, jQuery);
任意の送信ボタンをクリックすると、コンソールに次のメッセージが表示されます。
ボタンをクリックしてください!
フォーム(伝播)をクリックしてください!
フォームを提出してください!
ええOK。計画通り。しかし、カーソルをテキストフィールドにセットして「Enter」を押すと(ボタンをクリックせずに)、コンソールメッセージ:
フォーム(伝播)をクリックしてください!
ボタンをクリックしてください!
フォーム(伝播)をクリックしてください!
フォームを提出してください!
o_O? なんてこと?!送信ボタンがクリックされませんでした! これは私にとってまさに魔法です..
html から送信ボタンを削除します。
<form method="post">
<input type="hidden" name="default_action" value="default_action_value" />
<input type="text" name="count" value="1" />
</form>
そして、「Enter」ボタンでフォームを送信しようとしています。コンソール ログ:
フォーム(伝播)をクリックしてください!
フォームを提出してください!
これは、前の例で見られると予想されます。しかし、なぜjQueryは最初に見つかった送信ボタンに対してイベント「クリック」を発生させるのですか?
私の最初のタスクは、「送信」イベントのソースを定義することです。送信ボタンをクリックするか、「Enter」を押します。しかし、実際に「Enter」を押したときにjQueryが送信ボタンで「クリック」を起動した場合、どうすればよいですか? どのように?なんで?