在表格行 ( <tr>
) 中有几个输入元素。
当 tr 失去焦点时,我需要执行一些 JavaScript 代码(但不是当用户只是切换到同一个 tr 中的不同输入元素时)。
我使用 jQuery。
如何做到跨浏览器?
我想您正在寻找这种方法(demo,在 Chr/Ff/IE10 中检查):
var delayedFn, blurredFrom;
$('tr').on('blur', 'input', function(event) {
blurredFrom = event.delegateTarget;
delayedFn = setTimeout(function() {
console.log('Blurred');
}, 0);
});
$('tr').on('focus', 'input', function(event) {
if (blurredFrom === event.delegateTarget) {
clearTimeout(delayedFn);
}
});
如您所见,我们使用 - 延迟对“真正的模糊处理程序”(console.log
本例中的函数)的调用,setTimeout
如果我们看到焦点保持在同一行,则清除此超时。
我在这里使用委托,所以我不需要closest(tr)
每次都打电话。但它在这里有另一个副作用,因为处理程序将正确处理动态添加到表中的输入。