Кроссбраузерный эквивалент параметра события explicitOriginalTarget

StackOverflow https://stackoverflow.com/questions/179826

Вопрос

Кто-нибудь знает о кроссбраузерном эквиваленте параметра события 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;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top