Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > событие onMouseOver для фрейма


Автор: Rian 3.6.2008, 15:38
есть допустим у меня страница с двумя фреймами(name="Menu",name="Main" например)..В каждый фрейм грузятся разные страницы *.html (без кнопок и всяких там объектов-пустые)..мне нужно чтобы при наведении мыши на какаой либо из этих фреймов (обработчик события onMouseOver) происходило какоето действие...например появлялось окошко alert() или еще чтонибудь..как это сделать? 

Автор: Ghirik 3.6.2008, 16:29
Так и пишите document.frames.Menu.onmouseover = handler; 
где handler - ваша функция обработчик.
Эту строчку нужно прописать либо по событию onload страницы, либо в конце, после тегов ваших фреймов.

В обработчике this - это выш фрейм, который его вызвал.

Код

function handler() {
    alert(this.nodeName);
}

Автор: SelenIT 3.6.2008, 20:40
Не уверен, что у фрейма (окна по смыслу) будет такое событие. Я бы все-таки вешал обработчик на document.body страницы, которая грузится в этот фрейм, а не на сам фрейм как элемент страницы...

Автор: Ghirik 4.6.2008, 05:36
Обработчики работают на фрейме, он всё же принадлежит документу, а не отдельное окно.

Автор: SelenIT 4.6.2008, 10:32
Цитата(Ghirik @  4.6.2008,  05:36 Найти цитируемый пост)
он всё же принадлежит документу, а не отдельное окно

Он и то, и то на самом деле. Вот несколько старое, но, имхо, качественное разъяснение http://kruglov.ru/articles/nontrivialjs/#iframe.

Именно поэтому я не уверен, что 1) обработчики на фрейме сработают кроссбраузерно и 2) если в документе во фрейме будут свои обработчики, они их не перебьют...

Автор: Ghirik 4.6.2008, 12:39
http://door-to.ru/scripts/onmouseover/test.htm smile

onmouseover повешаны на фрейм и body документа во фрейме. Интересно, что onmouseover документа срабатывает первым - "Второй Ok!";

Автор: SelenIT 4.6.2008, 13:07
Цитата(Ghirik @  4.6.2008,  12:39 Найти цитируемый пост)
не поленился...

Спасибо за старания! smile

Убедили, во всем современном работает. Правда, все равно немного по-разному:
  • в IE6 и Op. 9.27 при наведении на элемент внутри фрейма всплывает сначала "Второй Ok!", затем "Ok!";
  • в FF3 RC1 "Ok!" всплывает только один раз - при пересечении границы самого фрейма (что имхо правильно), при пересечении границ элементов внутри фрейма почему-то всплывает дважды "Второй Ok!" (что имхо странно);
  • наконец, в Safari 3.1, если навести мышку и держать ее на одном месте (!) "Второй Ok!" и "Ok!" начинают выскакивать по очереди в бесконечном цикле (видимо, предыдущий alert, перехватывая фокус, "закрывает страничку от курсора", и когда в момент его закрытия курсор снова оказывается на ней, это интерпретируется как mouseover ;)

Но тест полезный!

Автор: Rian 4.6.2008, 14:36
Цитата(Ghirik @  3.6.2008,  16:29 Найти цитируемый пост)
Так и пишите document.frames.Menu.onmouseover = handler; где handler - ваша функция обработчик.Эту строчку нужно прописать либо по событию onload страницы, либо в конце, после тегов ваших фреймов.

 спс...но в итоге сделал вот так))

для штмл с фреймами:
    <frameset cols="45%,55%">    
        <frame src="left.html" name="leftFrame" scrolling="auto">
        <frame src="right.html" name="rightFrame" scrolling="auto"> 
    </frameset>    

для left.html:
function onMO(self)
{
    alert(document.title);
}
</script>
</head>
<body onmouseover="onMO(this);">

для right.html аналогично

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)