Есть одна небольшая проблема при использовании изложенного выше кода. Определение целевого элемента у события, на самом деле, не является просто вызовом e.target
. В Internet Explorer необходимо использовать e.srcElement
. Самым простым решением для устранения этой проблемы является небольшая функция getEventTarget
. Ниже представлена наиболее актуальная версия.
function getEventTarget(e) { var e = e || window.event; var target = e.target || e.srcElement; if (target.nodeType == 3) { // боремся с Safari target = target.parentNode; } return target; }
Переопределение событий в настоящее время является самой распространенной практикой, если речь заходит о большом числе обработчиков событий (например, о карте с сотнями точек, к которым назначены обработчики событий-кликов). Лучше всего для этого по умолчанию использовать простой, интуитивно понятный и хорошо оптимизированный метод для применения в качестве шаблона в программировании на стороне клиента, и он не должен требовать сотен строчек JavaScript-библиотек для своей работы.