这是简单的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);
当我单击任何提交按钮时,控制台中会出现以下消息:
点击按钮!
点击表格(传播)!
提交表格!
是的,好的。正如计划。但是当将光标设置到文本字段并按“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”。但是如何做到这一点,如果jQuery在真正按下“Enter”时触发“点击”提交按钮?如何?为什么?