jQuery:如何知道表格行何时失去焦点?

标签 jquery focus

在表行 ( <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/

相关文章:

javascript - JS 和可能的 Wordpress 中未捕获的语法错误

jquery - AJAX 注入(inject)的内容不应用包含页面的 css

wpf - 专注于 Canvas 中的边框

cocoa - NSTextField GotFocus 事件 Cocoa Swift

javascript - AngularJS - 专注于嵌套滚动中的对象

asp.net - 带有文本框的 AutoPostback 失去焦点

javascript - Jquery 将另一个元素聚焦在模糊上在 FireFox 中不起作用

javascript - leaflet展开控制和autoZindex

javascript - 如何从选择器字符串添加类?

javascript - 为什么 setTimeout 阻止递归 $http.get 调用