在javascript中,当我收到焦点事件时,如何确定哪个元素失去了焦点?我试图避免在我的网页中的所有元素上放置一个 onblur 事件处理程序。
5 回答
@pbrodka:target/srcElement 属性将引用具有焦点的元素以用于 onfocus 事件
顺便说一句,我看不出有什么方法可以让这个缺少 onblur,或者如果你关心的对象集都有焦点方法,你可以存储对该对象的引用。事件冒泡也有可能让你出狱
不过,这一切都感觉有点像代码味道 - 也许您需要更详细地描述问题
这很难。您不能使用事件委托来找出哪个控件最后产生了模糊,因为焦点/模糊不会冒泡。已经有人尝试“修复”这个问题,但它们有问题,而且跨浏览器不灵活。我能否问您为什么需要此信息,因为也许有替代解决方案。
不幸的是,onblur 事件不会冒泡,否则您可以在窗口级别处理它以始终知道元素何时失去焦点。
事实上,我确实相信,正如你所说,没有为所有元素添加一个 onblur 事件处理程序将很难做到(一个真正令人讨厌的解决方案;-)。
如果您遵循 PPK 的建议,可以在此处委派焦点和模糊事件: http ://www.quirksmode.org/blog/archives/2008/04/delegating_the.html
最简单的解决方案是编写一个函数,遍历所有表单,然后遍历表单中的所有元素,并为每个表单安装一个 onblur 处理程序(这可能会调用一些全局函数)。该处理程序将获得一个事件,该事件将包含您寻求的信息。
这样,您只需在 body.onload 中调用此方法一次,无论您的文档多么复杂,它都会起作用。
唯一的缺点是,如果您将表单动态添加到当前文档,则需要调用它。在这种情况下,您必须确保不要再次安装处理程序(否则您会得到虚假的重复事件)。