失去焦点后,下一个获得焦点的控件是什么?

4
我正在文本框的onblur()事件中执行一些代码。但是如果用户点击取消按钮导致onblur()事件触发,我想要做一些不同的事情。在onblur()事件处理程序函数内部,有没有一种方法可以知道即将获得焦点的控件,并相应地做出反应?
- Joseph
2个回答

6

是的,您可以像这样获得目标:

var target = event.explicitOriginalTarget || document.activeElement;

(我想我在StackOverflow上找到了这个答案。)


3
这里有相关的讨论 - https://dev59.com/QnVD5IYBdhLWcg3wAWkO 但是被接受的答案只在IE中有效,在Firefox(3.6)中无效。 - Chetan S
我还没有在很多浏览器上测试过,但我认为你误解了。我刚才读到的方式是,在除了3.6版本之外的所有Firefox浏览器中都可以正常工作。所以听起来像是他们将会很快在3.6版本中修复的一个bug。此外,我相信(尽管没有验证过)它也可以在Safari、Opera等浏览器上运行。 - Charlie Flowers
另一个帖子中被接受答案的作者回复了我的评论。它在3.6版本中可以工作,但有一个警告。他还说它在webkit浏览器中根本不起作用。 - Chetan S
1
我只使用IE,所以这对我来说非常好用。我测试过了,它的表现非常出色!在我的验证框架(jquery验证)中,我只需检查目标按钮是否以“Cancel”短语结尾。 onfocusout: function(element) { var target = document.activeElement; if (target != null && target.id.match(/Cancel$/)) { return true; } - BrokeMyLegBiking
很高兴听到这个消息。我也在一个IE项目上工作,它已经在我们的产品中进行了大约一个月的全面测试。 - Charlie Flowers

1

我认为没有内置的方法,但是你可以通过将focus事件附加到所有表单元素并设置一些全局可访问的变量来拼凑出一些东西,以记录谁获得了焦点。

类似这样(您可能需要微调时间值):

var focusedElem = null;
var focusedTime = 0;

$("input", "#myForm").focus(function() {
    focusedElem = this;
    focusedTime = new Date();
})
.blur(function() {
    setTimeout(function() { //set a small timeout to wait for the other control to receive focus and set itself as focusedElem
        if (focusedElem && (new Date() - focusedTime) < 15) {
            //do Something with focusedElem;
        }
    }, 10);
});

似乎是这样,但需要确认。 - Justin Johnson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接