在表行 ( <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);
}
});
如您所见,我们使用 setTimeout
延迟对“真正模糊处理程序”(即本例中带有 console.log
的函数)的调用 - 并清除此值如果我们看到焦点停留在同一行,则超时。
我在这里使用委托(delegate),因此不需要每次都调用 closest(tr)
。但它在这里还有另一个副作用,因为处理程序将正确处理动态添加到表中的输入。
关于jQuery:如何知道表格行何时失去焦点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16885880/