2009-09-04 97 views
0

我喜欢在我的(javascript)处理程序中收到onBlur事件时知道onFocus事件是什么(如果有的话)。这怎么可能?例如:我有一组文本框组成一组。只有当整个团队失去焦点时,我才会通知订户有关该团体的事件。所以如果发生onBlur事件,我只想转发它,当我注意到它没有在该组中的另一个文本框上的onFocus事件后。如何获得模糊事件后的焦点事件?

我现在通过延迟并查看焦点事件是否发生在与此同时。但是我不太喜欢这个解决方案:因为延迟模糊发生在焦点和它包含在延迟模糊中的事件之后,是“旧的”,这在进一步处理中可能是棘手的。

我的想法是:寻找“事件队列”,当我收到模糊事件,检测任何onFocus事件将遵循...但我不知道这是可能的,以及如何做到这一点:(...

回答

1

- 编辑:

在回顾了你的问题之后,我不太清楚你在问什么,所以我不知道我发布的内容是否合适,无论如何,我都留在这里考虑。

你可以用地图和“这个”变量做到这一点很平凡:

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变量,并检查该物体是否等于你想要的物体。

+0

坦克,但我认为我们有一个误区。 我想要什么:当我处于doBlur方法中时,如何确定焦点事件是否会跟随模糊事件。 希望这个更清楚。 – edbras 2009-09-04 11:22:18

+0

那么,你不能。您只能检查是否设置超时,并等待查看是否在该超时命中之前触发了focus()事件。 (或者只是看看focus()事件是否再次被触发,当'obj'实例不同时)。 – 2009-09-04 11:30:39

0

您可以使用委派方法blur and focus
因此,您将检查重点。

+0

谢谢,但你能提供更多的细节? 注意:如果我收到我的模糊事件,我想知道焦点事件是否会成为下一个事件之一......我无法看到如何通过委派/事件捕获来完成此操作.. – edbras 2009-09-04 11:19:12

+0

使用事件代理可以在一个地方处理所有事件。您可以创建一个全局(或单身人士,如果您更喜欢更清晰的解决方案)来存储上次焦点事件目标或模糊事件目标。根据以前的事件目标,改变脚本的行为。 – 2009-09-04 11:24:00

+0

因此,在处理模糊事件时,我无法查看焦点事件是否在模糊事件之后发生? – edbras 2009-09-04 13:38:35

1

焦点和模糊事件应该添加到事件队列,所以一个简单的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测试了它在1ms的,我敢肯定,时机也适用于其他浏览器。由于处理事件的方式,模糊火灾,然后集中,然后计时器。

如果你真的想确保从事件保持this在你的事件处理程序变为:

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

我不明白你的解决方案。 为什么你提出这个问题?,因为我的问题,我解释了我现在拥有的定时器解决方案...... 我想要什么:知道焦点事件是否会在模糊事件发生之后跟随... – edbras 2009-09-04 11:20:41

+0

唯一的确定聚焦事件是否会跟随模糊事件的方法是延迟处理模糊事件,直到焦点事件已经在队列中。 1ms超时会延迟模糊处理程序的脚本执行,直到您可以处理焦点事件。 – gnarf 2009-09-04 17:39:24

相关问题