Кроссбраузерный эквивалент параметра события visibleOriginalTarget - PullRequest
17 голосов
/ 07 октября 2008

Кто-нибудь знает о кросс-браузерном эквиваленте параметра события visibleOriginalTarget? Этот параметр специфичен для Mozilla и дает мне элемент, который вызвал размытие. Допустим, у меня есть текстовый ввод и ссылка на моей странице. Ввод текста имеет фокус. Если я нажму на ссылку, событие размытия при вводе текста даст мне элемент ссылки в Firefox через параметрlicitOriginalTarget.

Я расширяю метод onBlur Autocompleter.Base, чтобы не скрывать результаты поиска, когда поле поиска теряет фокус на заданные элементы. По умолчанию метод 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'] });

Спасибо.

Ответы [ 6 ]

9 голосов
/ 08 октября 2008

Не существует эквивалента manifestOriginalTarget ни в одном другом браузере, кроме Gecko. В Gecko это внутреннее свойство, и оно не должно использоваться разработчиком приложения (возможно, авторами связывания XBL).

4 голосов
/ 23 февраля 2015

2015 обновление ... вы можете использовать event.relatedTarget в Chrome. Такая простая вещь, надеюсь, что другие браузеры будут следовать ...

3 голосов
/ 05 мая 2012

IE srcElement не содержит того же элемента, что и FF explicitOriginalTarget. Это легко увидеть: если у вас есть поле кнопки с действием onClick и текстовое поле с действием onChange, измените текстовое поле и переместите курсор прямо на кнопку и щелкните ее. В этот момент IE srcElement будет текстовым полем, а explicitOriginalTarget будет полем кнопки. Для IE вы можете получить координаты x, y щелчка мыши в свойствах event.x и event.y.

К сожалению, браузер Chrome не предоставляет ни explicitOriginalTarget, ни координат мыши для щелчка. Вы оставлены на свое усмотрение, чтобы выяснить, откуда произошло событие onChange. Для этого разумное использование событий mousemove и mouseout может обеспечить отслеживание мыши, которое затем можно проверить в обработчике onChange.

3 голосов
/ 11 февраля 2010

Грубый эквивалент для .explicitOriginalTarget в IE в Mozilla - это document.activeElement. Я говорю грубый эквивалент, потому что он иногда возвращает немного другой уровень в дереве узлов DOM в зависимости от ваших обстоятельств, но это все еще полезный инструмент. К сожалению, я все еще ищу эквивалент Google Chrome.

1 голос
/ 07 октября 2008

Похоже, он больше предназначен для разработчиков расширений, чем для веб-дизайна ...

Я бы наблюдал события размытия / фокуса на обеих целях (или потенциальных целях) и делился их информацией.
Точная реализация может зависеть от цели.

0 голосов
/ 07 марта 2012

Для IE вы можете использовать srcElement и принудительно.

if( !selectTag.explicitOriginalTarget )
    selectTag.explicitOriginalTarget = selectTag.srcElement;
...