javascript 如何在模糊事件之后获得焦点事件?

0sgqnhkj  于 2023-01-01  发布在  Java
关注(0)|答案(3)|浏览(111)

当我在我的(JavaScript)处理程序中接收到一个onBlur事件时,我想知道onFocus事件是什么(如果有的话)。
例如:我有一组文本框组成一个组。只有当整个组失去焦点时,我才想通知订阅者组onBlur事件。因此,如果onBlur事件发生,我只想在注意到它后面没有组中另一个文本框的onFocus事件时转发它。
我现在通过延迟来执行此操作,并查看是否同时发生了焦点事件。但我不太喜欢这个解决方案,因为:由于延迟,模糊出现在聚焦之后,并且包含在延迟模糊中的事件是“旧的”,这在进一步处理中可能是棘手的。
我的想法是:在“事件队列”中查找,当我接收到模糊事件时,检测任何将跟随的onFocus事件,但我不知道这是否可能以及如何做到这一点。

iszxjhcz

iszxjhcz1#

  • -编辑:
    看过你的问题后,我不太清楚你在问什么,所以我不确定我贴的是否合适。不管怎样,我把它留在这里考虑。
    你可以用一个map和'this'变量来完成这件事:
var map = new Object();

...

function doBlur (obj) {
   if(map[obj] == "focus"){
   }
}

function doFocus (obj) {
    map[obj] = "focus";
}

<input onblur="doBlur(this);" onfocus="doFocus(this);" />

但更进一步说,假设一次只能聚焦一个文本框,您可以只使用一个名为lastFocus的变量,并检查该对象是否等于您想要的对象。

chhkpiq4

chhkpiq42#

焦点和模糊事件应该被添加到事件队列中,因此简单的1-100毫秒setTimeout可能就可以完成这个任务。
我知道您没有使用jQuery --但我可以轻松地编写一个使用它的示例:

var blurTimeout;

function blurAlert() {
   alert('Lost Focus');
}

// assign these two simple functions to all inputs on the page.
$('input').blur(function() {
  blurTimeout=setTimeout(blurAlert, 1);
}).focus(function() {
  clearTimeout(blurTimeout);
});

我刚刚在firefox上测试了它的1 ms,我很确定其他浏览器的计时也会很好,因为事件处理的方式,blur先触发,然后焦点,然后计时器。
如果你真的想确保this在你的事件处理器变成的事件中存在:

function() { 
   blurTimeout = setTimeout(function() {
     blurAlert.apply(this,arguments);
   }, 1);
 }
fkaflof6

fkaflof63#

可以对blur and focus使用委托方法
因此,您将检查聚焦的内容。

相关问题