1

在javascript中,当我收到焦点事件时,如何确定哪个元素失去了焦点?我试图避免在我的网页中的所有元素上放置一个 onblur 事件处理程序。

4

5 回答 5

1

@pbrodka:target/srcElement 属性将引用具有焦点的元素以用于 onfocus 事件

顺便说一句,我看不出有什么方法可以让这个缺少 onblur,或者如果你关心的对象集都有焦点方法,你可以存储对该对象的引用。事件冒泡也有可能让你出狱

不过,这一切都感觉有点像代码味道 - 也许您需要更详细地描述问题

于 2008-11-18T11:35:22.447 回答
0

这很难。您不能使用事件委托来找出哪个控件最后产生了模糊,因为焦点/模糊不会冒泡。已经有人尝试“修复”这个问题,但它们有问题,而且跨浏览器不灵活。我能否问您为什么需要此信息,因为也许有替代解决方案。

于 2008-11-18T11:35:23.833 回答
0

不幸的是,onblur 事件不会冒泡,否则您可以在窗口级别处理它以始终知道元素何时失去焦点。

事实上,我确实相信,正如你所说,没有为所有元素添加一个 onblur 事件处理程序将很难做到(一个真正令人讨厌的解决方案;-)。

于 2008-11-18T11:40:28.037 回答
0

如果您遵循 PPK 的建议,可以在此处委派焦点和模糊事件: http ://www.quirksmode.org/blog/archives/2008/04/delegating_the.html

于 2009-09-09T12:50:09.130 回答
-1

最简单的解决方案是编写一个函数,遍历所有表单,然后遍历表单中的所有元素,并为每个表单安装一个 onblur 处理程序(这可能会调用一些全局函数)。该处理程序将获得一个事件,该事件将包含您寻求的信息。

这样,您只需在 body.onload 中调用此方法一次,无论您的文档多么复杂,它都会起作用。

唯一的缺点是,如果您将表单动态添加到当前文档,则需要调用它。在这种情况下,您必须确保不要再次安装处理程序(否则您会得到虚假的重复事件)。

于 2008-11-18T12:19:12.340 回答