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!"; 

其中eevent

【讨论】:

与仅使用 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 [重复]

如何知道一个对象对于 GWT 和 IE8 中的 RPC 是不是“太大”?

不透明度(兼容IE8,chrome,firefox)