我试图将其归结为一个简单的示例来演示我遇到的问题。
我有一个带有输入字段和提交按钮的表单:
<form id="focusOutAfterInputForm">
<input type="text" id="focusoutAfterInput">
<input type="submit" >
<div></div>
</form>
输入字段附加了一个焦点处理程序,该处理程序在输入下方插入一个新元素:
jQuery("#focusoutAfterInput").focusout(function() {
jQuery(this).after("<div>message</div>");
});
我还附加了一个提交处理程序,只是为了捕获提交是否运行:
jQuery("form").submit(function() {
jQuery("#console").append("<li>submitted form" + this.id + "</li>");
return false;
});
如果将光标放在输入中并单击提交按钮,则不会触发提交处理程序。如果再次单击提交按钮,它将触发。此外,如果该字段是模糊的,然后按下提交按钮,它将触发。
但是,如果我们在表单中的 div 下方插入新元素,即使插入了元素,提交按钮也会触发:
<form id="focusoutAfterDivForm" novalidate="novalidate">
<input type="text" id="focusoutAfterDiv" required="true">
<input type="submit" >
<div></div>
</form>
jQuery("#focusoutAfterDiv").focusout(function() {
jQuery(this).parent().last().after("<div>message</div>");
});
这是一个演示代码的jsfiddle 。我有点困惑。任何人的想法?