IE8 和 Firefox 中的 event.toElement?
Posted
技术标签:
【中文标题】IE8 和 Firefox 中的 event.toElement?【英文标题】:event.toElement in IE8 and Firefox? 【发布时间】:2012-01-25 21:01:35 【问题描述】:我注意到在 Chrome 和 IE9 中,onmouseout
事件有一个 event.toElement
属性(因此您可以确定鼠标现在指向哪个元素)。
我在 Firefox 中找不到类似的属性。
很遗憾我不能使用jQuery来处理这些事件,我必须使用原生js。
任何建议将不胜感激。
【问题讨论】:
顺便说一句,在 jQuery 中它应该是 api.jquery.com/event.relatedTarget,就像在 Firefox 中一样。 我不太确定@BarnabasSzabolcs。在 2018 年,e.relatedTarget 和 $(e).relatedTarget 分别为 null 和 undefined 【参考方案1】:你应该使用这个而不是 event.toElement:
event.target
【讨论】:
这个答案对我有用。 currentTarget 和relatedTarget 可以给你不同的结果。例如当 e.target 给我 (就像 e.toElement 一样)时,在 的点击事件中,但是 currentTarget 和relatedTarget 给了我整个 . 这正是我所需要的。我对javascript很陌生,所以我不知道为什么我什至使用“toElement”可能是我在某处看到的一些代码示例。 Target 显然是我一开始就想要的。 这是最好的答案。 如果你还想获取 Webkit/Chrome 的 localName gist.github.com/aubreypwd/748ba5958ae3fde694a2,这是一个很好的例子 鼠标离开的目标不是元素吗? toElement 将是鼠标 离开到的元素,所以答案是错误的?【参考方案2】:在 Firefox 中是 event.relatedTarget
https://developer.mozilla.org/en/DOM:event.relatedTarget#1003983
【讨论】:
既然您意识到IE
确实有event.toElement
,请从问题和答案中删除它的引用以避免混淆......这样做不会使任何其他现有答案无效。跨度>
仅供参考 - IE11 似乎没有 event.toElement
请使用 Azam Alvi 的答案。首选目标。【参考方案3】:
我在使用 Jay 的答案时遇到了一个问题,firefox 上的 event.target
指向 chrome 上 event.toElement
目标的父元素。
查看事件 obj 后,我发现 event.originalEvent.target
,它在 firefox 和 chrome 上都运行良好。
【讨论】:
【参考方案4】:其实event.currentTarget
应该可以在Chrome、Firefox和IE下运行
【讨论】:
event.currentTarget 正在返回事件所属的元素,而不是正在与之交互的元素。例如,您可以使用事件冒泡在父元素上定义事件,这样您就不必将类似的事件处理程序附加到所有子元素。 是的,为什么 FF 没有 toElement :(【参考方案5】:截至2014年,IE11不支持toElement
,我查看了事件对象发现target
与toElement有相同的数据。
也就是说,如果你点击了触发该事件的元素内的一个子元素,该子元素将成为“目标”并存储在该属性中。
触发事件的元素存储在currentTarget
属性中。
注意,我只测试了 ie 11,所以旧版本可能不支持这个。
因此,为了支持 firefox ie 和 chrome(可能还有其他的,一个 polyfill 是必要的,例如:
var target = e.toElement || e.relatedTarget || e.target || function () throw "Failed to attach an event target!";
其中e
是event
【讨论】:
与仅使用 e.target 相比有什么好处?【参考方案6】:代码易于遵循..
enter code here
if(typeof evt.toElement !== "undefined")
evt.toElement.classList.toggle('done');
else if(typeof evt.relatedTarget !== "undefined")
if(evt.relatedTarget !== null)
evt.relatedTarget.classList.toggle('done');
else if(typeof evt.currentTarget !== "undefined")
evt.currentTarget.classList.toggle('done');
else
console.log("s_f_li_clickexception...");
//endif
//endif
【讨论】:
我认为只做一次 evt.toElement = thesupportedFunction 然后使用 evt.toElement 会更有效以上是关于IE8 和 Firefox 中的 event.toElement?的主要内容,如果未能解决你的问题,请参考以下文章
Javascript关闭IE6,IE7,IE8和Firefox没有确认框?
摘要身份验证在 IE8、Firefox 和 Chrome 上不起作用
样式适用于 Firefox 和 IE8,但不适用于 Chrome(居中与 text-align=left)
jQuery背景按钮动画适用于Chrome和IE8,但不适用于Firefox或IE9 [重复]