jQuery - 当焦点离开一组控件时引发事件

use*_*444 6 html javascript jquery jquery-focusout

我在div中有3个文本框,当焦点离开其中一个输入而不转到这3个输入中的另一个时,我需要引发一个事件.

只要用户正在编辑这3个控件中的一个,事件就不会引发.只有当焦点变为不是这些输入之一的控件时,才会引发该事件.

我尝试使用focusout所有3个输入并检查是否document.ActiveElement是3个输入中focusout的一个,但是一个控件focusin在另一个之前发生,因此document.ActiveElement总是为空.

任何人都知道如何解决这个问题?

mus*_*fan 10

我会考虑使用计时器来解决这个棘手的困境.

当焦点丢失时,启动计时器.然后,如果焦点设置在另一个"安全"输入上,则可以取消定时器.

像这样的东西:

var timeoutID;

$("#TheSafeZone input").focus(function () {
    if (timeoutID) {
        clearTimeout(timeoutID);
        timeoutID = null;
    }
});

$("#TheSafeZone input").blur(function () {
    releaseTheHounds();
});

function releaseTheHounds() {
    timeoutID = setTimeout(function () {
            alert("You're all going to die down here");
    }, 1);
}
Run Code Online (Sandbox Code Playgroud)

这是一个有效的例子

注意:我已将超时设置为just 1ms,这对我来说似乎可靠,但在其他浏览器中进行一些测试可能值得(我使用的是Chrome).我想这取决于JS引擎如何处理事件,但我不知道如何自信地说所有浏览器都会工作相同