Ответ 1
Вместо event.toElement вы должны использовать это:
event.target
Я заметил, что в Chrome и IE9 для событий onmouseout
есть свойство event.toElement
(так что вы можете определить, на какой элемент указывает мышь).
Я не могу найти похожую недвижимость в Firefox.
К сожалению, я не могу использовать jQuery для обработки этих событий, я должен использовать нативный js.
Любой совет будет принят во внимание.
Вместо event.toElement вы должны использовать это:
event.target
В Firefox это event.relatedTarget
https://developer.mozilla.org/en/DOM:event.relatedTarget#1003983
Я столкнулся с проблемой, когда я использую ответ Jay, event.target
в firefox указывает на родительский элемент event.toElement
target на chrome.
Изучив событие obj, я нахожу event.originalEvent.target
, он отлично работает как с firefox, так и с хром.
Фактически event.currentTarget
должен работать в Chrome, Firefox и IE
Начиная с 2014 года IE11 не поддерживает toElement
, я просмотрел объект события и обнаружил, что target
имеет те же данные, что и для элемента.
То есть, если вы нажмете на дочерний элемент внутри элемента, к которому это событие включается, дочерний элемент будет "объектом" и будет сохранен в этом атрибуте.
Элемент, из которого произошел событие, хранится в атрибуте currentTarget
.
Примечание. Я тестировал это только для 11, поэтому более старые версии могут не поддерживать это.
Итак, для поддержки firefox ie и chrome (и, возможно, других, понадобится polyfill, что-то вроде:
var target = e.toElement || e.relatedTarget || e.target || function () { throw "Failed to attach an event target!"; }
Где e
- event
код легко следовать..
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