0

如果焦点已转移到另一个特定元素(另一个 SELECT),我想做的是测试一个元素(一个 SELECT)何时失去焦点。我想在失去焦点并且不在两者之一上时触发某些东西。

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

这是我所做的一个例子:

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

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

在所有情况下,它都会进入 else “做其他事情”。

4

2 回答 2

2

马特关于事件的顺序是正确的,但你可以更有创意。

例如,使用 setTimeout 来延迟模糊检查,这样你就知道你已经触发了你的焦点。简单的。

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

试试那个。

于 2012-04-04T16:40:26.820 回答
1

因为该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/

于 2012-04-04T16:29:11.413 回答