我有一个blur
事件附加到带有一个或多个可点击项目(例如输入字段和按钮)的容器(在本例中为表格单元格)。
在我的细胞嵌入形式中可能会发生两件事。如果其中一个输入字段中的值发生更改,则处理表单。如果值未更改,但焦点丢失,则清除表单。
blur
如果用户单击了单元格中的另一个项目,我不希望该单元格出现。
这是我尝试过的事情 - 检查blur
事件中专注的孩子的数量。
HTML
<table>
<tr>
<td id="edit">
<input type="text"></input>
<input type="checkbox"></input>
<button>Test</button>
</td>
</tr>
</table>
JavaScript
$('table').on('change', '#edit input', function () {
alert('An input field has changed');
});
$('table').on('blur', '#edit', function () {>
if ($(this).children(':focus').length == 0) {
alert('The user has clicked away from the form');
} else {
alert('The user hasn\'t finish editing yet');
}
});
但不幸的是,专注的孩子的长度总是报告为0!
然后我尝试了
$('body').not('#edit, #edit > *').on('focus', function () {
alert('The user has clicked something else');
});
但这根本不起作用!而且我也对此表示怀疑,因为我要求在change
处理程序之前触发focus
处理程序,这样如果用户进行了更改,表单就不会被取消。
这是给你懒惰的孩子的 jsfiddle:http: //jsfiddle.net/QmVsr/