Кроссбраузерный эквивалент параметра события explicitOriginalTarget
-
05-07-2019 - |
Вопрос
Кто-нибудь знает о кроссбраузерном эквиваленте параметра события explicitOriginalTarget?Этот параметр специфичен для Mozilla, и он выдает мне элемент, который вызвал размытие.Допустим, у меня есть текстовый ввод и ссылка на моей странице.Основное внимание уделяется вводу текста.Если я нажимаю на ссылку, событие размытия ввода текста выдает мне элемент link в Firefox через параметр explicitOriginalTarget.
Я расширяю автозаполнение.Базовый метод onBlur позволяет не скрывать результаты поиска, когда поле поиска теряет фокус на заданных элементах.По умолчанию метод onBlur скрывается, если поле поиска теряет фокус на каком-либо элементе.
Autocompleter.Base.prototype.onBlur = Autocompleter.Base.prototype.onBlur.wrap(
function(origfunc, ev) {
var newTargetElement = (ev.explicitOriginalTarget.nodeType == 3 ? ev.explicitOriginalTarget.parentNode: ev.explicitOriginalTarget); // FIX: This works only in firefox because of event's explicitOriginalTarget property
var callOriginalFunction = true;
for (i = 0; i < obj.options.validEventElements.length; i++) {
if ($(obj.options.validEventElements[i])) {
if (newTargetElement.descendantOf($(obj.options.validEventElements[i])) == true || newTargetElement == $(obj.options.validEventElements[i])) {
callOriginalFunction = false;
break;
}
}
}
if (callOriginalFunction) {
return origFunc(ev);
}
}
);
new Ajax.Autocompleter("search-field", "search-results", 'getresults.php', { validEventElements: ['search-field','result-count'] });
Спасибо.
Решение
Эквивалента explicitOriginalTarget нет ни в одном из браузеров, кроме основанных на Gecko.В Gecko это внутреннее свойство, и оно не должно использоваться разработчиком приложения (возможно, авторами привязки XBL).
Другие советы
обновление 2015 года...вы можете использовать event.relatedTarget в Chrome.Такая базовая вещь, надеюсь, другие браузеры последуют ее примеру...
Грубым эквивалентом для Mozilla .explicitOriginalTarget в IE является document.activeElement.Я говорю грубый эквивалент, потому что иногда он возвращает немного другой уровень в дереве узлов DOM в зависимости от ваших обстоятельств, но это все равно полезный инструмент.К сожалению, я все еще ищу эквивалент Google Chrome.
IE srcElement
не содержит того же элемента, что и FF explicitOriginalTarget
.Это легко увидеть:если у вас есть поле кнопки с onClick
действие и текстовое поле с onChange
действие, измените текстовое поле и наведите курсор непосредственно на кнопку и щелкните по ней.В этот момент IE srcElement
будет текстовым полем, но explicitOriginalTarget
будет полем кнопки.Для IE вы можете получить координаты x, y щелчка мыши из event.x
и event.y
свойства.
К сожалению, браузер Chrome не предоставляет ни explicitOriginalTarget
ни координаты мыши для щелчка.Вы предоставлены сами себе, чтобы выяснить, где onChange
событие было запущено из.Для этого разумно используйте mousemove
и mouseout
события могут обеспечивать отслеживание мыши, которое затем может быть проверено в onChange
обработчик.
Похоже, он больше предназначен для авторов расширений, чем для веб-дизайна...
Я бы наблюдал за событиями размытия / фокусировки для обеих целей (или потенциальных целей) и делился бы их информацией.
На самом деле точная реализация может зависеть от цели.
Для IE вы можете использовать srcElement
, и заставил это сделать.
if( !selectTag.explicitOriginalTarget )
selectTag.explicitOriginalTarget = selectTag.srcElement;