在丢失焦点时测试哪个元素具有焦点

Testing which element has focus when one lost it

本文关键字:焦点 元素 测试      更新时间:2023-09-26

如果焦点已转移到另一个特定元素(另一个SELECT),我要做的是测试元素(SELECT)何时失去焦点。我想在注意力不集中的时候触发一些东西,而不是在两者中的一个上。

问题是,我在第一个选择中测试它何时失去焦点(使用模糊事件),如果另一个选择有焦点,但DOM尚未更新。

下面是我所做的一个例子:

$select1.on("blur", function() {
    if($select2.is(":focus"))
    {
         // do something
    }
    else
    {
        // do something else
    }
});

$select1和$select2只是包含该元素的两个变量。我读到JQuery在元素获得焦点时添加了一个标识符":焦点",但按照我的做法,它不起作用。

在所有情况下,它都会变成"做其他事情"。

Matt对事件的顺序是正确的,但你可以更有创造力。

例如,使用setTimeout来延迟模糊检查,这样您就知道您已经启动了焦点。易于理解的

$select1.on("blur", function() {
  window.setTimeout(function() {
    if($select2.is(":focus"))
    {
       // do something
    }
    else
    {
      // do something else
    }
  },100);
});

试试那个。

因为blur事件在新元素的focus之前明显地被激发,所以唯一能做的就是在一个事件中设置一个变量,并在另一个中检测它。

$select1.on('blur', function (e) {
    var $that = $(this);
    setTimeout(function () {
        if (($that.data('focussed') || 0) > e.timeStamp - 5) {
            // Do something
        } else {
            // Something else
        }
    }, 1);
}); 
$select2.on('focus', function (e) {
    $select1.data('focussed', e.timeStamp);
});

看到它在这里工作;http://jsfiddle.net/uZAMm/