4

在表格行 ( <tr>) 中有几个输入元素。

当 tr 失去焦点时,我需要执行一些 JavaScript 代码(但不是当用户只是切换到同一个 tr 中的不同输入元素时)。

我使用 jQuery。

如何做到跨浏览器?

4

1 回答 1

14

我想您正在寻找这种方法(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)每次都打电话。但它在这里有另一个副作用,因为处理程序将正确处理动态添加到表中的输入。

于 2013-06-02T18:42:52.853 回答