Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.08.2012, 19:25
Аспирант
Отправить личное сообщение для codingfighter Посмотреть профиль Найти все сообщения от codingfighter
 
Регистрация: 05.04.2012
Сообщений: 65

onmouseout и линк
Всем привет. Столкнулся с довольно странной проблемой. Стоит родительский div в котором прописаны события onmouseover и onmouseout. Все работает, но когда наводишь курсор на ссылку внутри этого div'a чего-то срабатывает событие onmouseout хотя ведь курсор все еще в родительском div'e. Как посоветуете решить проблему?
Ответить с цитированием
  #2 (permalink)  
Старый 06.08.2012, 19:30
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

используйте события onmouseenter, onmouseleave
<div id="la" style="width: 100px; height: 100px; background: #f00;">
    <a href="">test</a>
</div>
<script>
    document.getElementById('la').onmouseenter = function() {
        this.style.backgroundColor = '#0f0';
    }
    document.getElementById('la').onmouseleave = function() {
        this.style.backgroundColor = '#f00';
    }
</script>
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #3 (permalink)  
Старый 06.08.2012, 19:32
Аспирант
Отправить личное сообщение для codingfighter Посмотреть профиль Найти все сообщения от codingfighter
 
Регистрация: 05.04.2012
Сообщений: 65

Читал уже про это http://www.xiper.net/manuals/html/ev...ouseenter.html

Цитата:
Событие onmouseenter работает только в IE. Для кроссбраузерного решения используется событие onmouseover.
так что тут замкнутый круг.

читаю про такие жонглирования http://javascript.ru/tutorial/events...rigger:-target
Ответить с цитированием
  #4 (permalink)  
Старый 06.08.2012, 19:37
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

ну в опере оно тоже работает... так что там на сайте не полная инфа, а в идеале нужно смотреть в других браузерах.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #5 (permalink)  
Старый 06.08.2012, 19:40
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

а вообще странно что оно не поддерживается другими браузерами кроме ИЕ и Оперы, хотя насчет ФФ ничего не скажу... нет возможности проветить.. Но в хроме точно не пашет.. Хотя в спецификации такие события есть http://www.w3.org/TR/DOM-Level-3-Eve...ype-mouseenter
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #6 (permalink)  
Старый 06.08.2012, 19:49
Аспирант
Отправить личное сообщение для codingfighter Посмотреть профиль Найти все сообщения от codingfighter
 
Регистрация: 05.04.2012
Сообщений: 65

нда уж, что называется осложнили жизнь
Ответить с цитированием
  #7 (permalink)  
Старый 06.08.2012, 19:52
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от codingfighter
нда уж, что называется осложнили жизнь
честно говоря я не ожидал того что в хроме не будет работать то что описано в документах. Вроде как хром хвалят за то что любит всякие экспериментальные штуки добавлять и то что в черновиках.. Уж не думал что банальное событие в хроме не будет работать.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #8 (permalink)  
Старый 06.08.2012, 19:55
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

ну а выход лишь один, для браузеров имеющих событие юзай его, а для других пиши костыль. Начало кода примерно такое:
// elem - это элемент на который хочешь повесить событие
if ( "onmouseenter" in elem ) {
    // тут код для тех кто его понимает
} else {
    // тут для тех кто не понимает пишешь костыль.
}
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #9 (permalink)  
Старый 06.08.2012, 20:01
Аспирант
Отправить личное сообщение для codingfighter Посмотреть профиль Найти все сообщения от codingfighter
 
Регистрация: 05.04.2012
Сообщений: 65

нет, лучше уже просто словить откуда событие пришло. вот пример кода (со страницы на которую я давал линк)

// Обработчик для mouseover
function mouseoverHandler(event) {
	event = event || window.event
	var relatedTarget = event.relatedTarget || event.fromElement
	// для mouseover
	// relatedTarget - элемент, с которого пришел курсор мыши
}

// Обработчик для mouseout
function mouseoutHandler(event) {
	event = event || window.event
	var relTarg = event.relatedTarget || event.toElement
	// для mouseout
	// relatedTarget - элемент, на который перешел курсор мыши
}


кстати подправить там надо, relTarg во второй функции (комментарий)

Последний раз редактировалось codingfighter, 06.08.2012 в 20:33.
Ответить с цитированием
  #10 (permalink)  
Старый 06.08.2012, 20:38
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

ну дык это и называется костыль
<div id="la" style="width: 100px; height: 100px; background: #f00;">
    <a href="">test</a>
</div>
<script>
    function onMouseEnter( elem, callback ) {
        if ( "onmouseenter" in elem ) {
            if ( elem.addEventListener ) {
                 elem.addEventListener( "mouseenter", callback, false );
            } else {
                 elem.attachEvent( "onmouseenter", callback );
            }
        } else if ( elem.addEventListener ) {
            elem.addEventListener( 'mouseover', function( event ) {

                var relTarg = event.relatedTarget;

                while( relTarg && relTarg !== elem && ( relTarg = relTarg.parentNode ) ) {}

                if ( relTarg !== elem ) {
                    callback && callback.call( this, event );
                }
            }, false );
        }
    }

    function onMouseLeave( elem, callback ) {
        if ( "onmouseleave" in elem ) {
            if ( elem.addEventListener ) {
                 elem.addEventListener( "mouseleave", callback, false );
            } else {
                 elem.attachEvent( "onmouseleave", callback );
            }
        } else if ( elem.addEventListener ) {
            elem.addEventListener( 'mouseout', function( event ) {

                var relTarg = event.relatedTarget;

                while( relTarg && relTarg !== elem && ( relTarg = relTarg.parentNode ) ) {}

                if ( relTarg !== elem ) {
                    callback && callback.call( this, event );
                }
            }, false );
        }
    }

    var elem = document.getElementById('la');
    onMouseEnter( elem, function() {
        document.body.appendChild(document.createTextNode('over|'));
    });
    onMouseLeave( elem, function() {
        document.body.appendChild(document.createTextNode('out|'));
    });
</script>
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine

Последний раз редактировалось devote, 06.08.2012 в 20:48.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
onmouseout для ячейки таблицы. Sir_Hally Events/DOM/Window 2 24.01.2012 17:21
onmouseout with image Slawaq Events/DOM/Window 3 21.05.2011 01:03
Кто нибудь подскажет onmouseout при ul > li > ul, или все Великие kudenv Элементы интерфейса 2 12.03.2011 12:34
Проблемы с отработкой onmouseout micscr Events/DOM/Window 5 22.09.2009 18:19
вопрос такой:как поймать ивент до нажатия на линк!!? magavnuk Events/DOM/Window 3 13.07.2009 16:22