当我在my(javascript)处理程序中收到onBlur事件时,我想知道onFocus事件是什么(如果有的话)。这怎么可能?
示例:我有一组构成一个组的文本框。只有当整个小组失去焦点时,我才想通知订阅者关于小组onBlur事件。因此,如果发生onBlur事件,我只想在我注意到组中另一个文本框上没有onFocus事件后才转发它。
我现在通过延迟来做这件事,并查看焦点事件是否同时发生。但我不喜欢这个解决方案:由于延迟,焦点发生后模糊发生,延迟模糊中包含的事件“老”,这在进一步处理时可能会很棘手。
我的想法是:查看“事件队列”,当我收到模糊事件时,检测将跟随的任何onFocus事件......但我不知道这是否可行以及如何执行此操作:(。 ..
答案 0 :(得分:1)
- 编辑:
在审核了你的问题后,我不太确定你在问什么,所以我不确定我发布的内容是否合适。无论如何,我把它留在这里考虑。
您可以使用地图和'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
的变量,并检查该对象是否等于你想要的那个。
答案 1 :(得分: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);
}
答案 2 :(得分:0)
您可以使用blur and focus的委派方法 因此,您将检查重点是什么。