Следственный эксперимент>> <script> >> function setHE (){ >> self.onmouseover=over; >> } > > Супер... Вот И Ошибка. Это Что Должно Означать? К Чему Привязано Событие? Честно Говоря, Что Такое self, Я Не Знаю. Но, Если Это Аналог this, То Фокус Не Пройдет: Функция Написана В Контексте window, И this Здесь Не Означает Никакого Элемента. > Вот И DOM Тоже Не Понимает, К Чему Это Привязано, Поэтому Везде currentTarget - undefined. > > Повторюсь. > 1. currentTarget - Это Тот _Элемент_, Которому Назначен Обработчик События. > 2. target - Это Тот Элемент, Который Событие Вызвал. > > Пример: > > <Table><TR><TD Id=Cell Style="Padding:1em;">Some Text, <Em>Some Text</Em> </Table> > <Script Type="text/javascript"> > function MouseOver(e){ > document.getElementById('Result').firstChild.nodeValue='Target: '+e.target.nodeName+'\ncurrentTarget: '+e.currentTarget.nodeName; > }//MouseOver > > /* Назначать Событие Желательно Чему-Нибудь Определенному: */ > document.getElementById('Cell').onmouseover=MouseOver; > </Script> > > <Div Id=Result> > ... > </Div> > > Как Видно, currentTarget - Это Всегда TD, Которой Назначен Обработчик. > > Еще Одно Замечание Касаемо Теперь Уже Target. Вообще Говоря, Текстовый Node Внутри Элемента <TD> Не Должен Менять Target, Потому Что Он - Не Элемент. Эту Ошибку В Мозилле Недавно Исправили (Кажется, Этот Фикс Успел Попасть В Финальную Версию 1.3). Поэтому Я Включил В Пример Внутрь TD Еще И Элемент <Em>, Чтобы Показать, Как На Нем Меняется Target. Но, В Любом Случае, currentTarget ВСЕГДА Показывает На Элемент, К Которому Привязано Событие.
1. self - текущий фрейм = window. События отслеживаются на уровне окна. И прекрасно ДОМ все понимает, поскольку событие всплывает до уровня окна. 2. Я прекрасно понимаю, что можно вообще каждому элементу назначить обработчик, однако, ИМХО, нафига тогда вообще иерархия объектов? Представляется естественным установить источник события по ID и его обрабатывать. 3. У меня Мозилла 1.2.1. Текстовый нод не меняет target, он просто не передает событие вверх. 4. Bсем спасибо, ситуация исправляется простым обращением к parentNod. |