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


Автор: Хрипа 24.9.2007, 11:29
                          
 var object = document.createElement("div");
             document.body.appendChild(object);
             object.id = this.item_id[i];
             object.style.position = "absolute";
             objects[i] = object;

                                Вопрос как мне задать  onmouseout что бы выполнялась определённая функция.

Автор: dsCode 24.9.2007, 11:59
Хрипа, так и задавайте:

Код

object.onmouseout = function(e) {
  e = e || window.Event || window.event;
  .....
}

Автор: Хрипа 24.9.2007, 16:41
dsCode, 
спасибо понел

Автор: cruelangel 24.9.2007, 20:28
"window.Event" - это что такое?  smile 

Автор: dsCode 24.9.2007, 22:21
cruelangel, 
Цитата(cruelangel @  24.9.2007,  20:28 Найти цитируемый пост)
"window.Event" - это что такое?

это для FF, для IE и Opera - window.event (с маленькой буквы). Равно как и e.target - для FF, и e.srcElement для IE.

Автор: SelenIT 25.9.2007, 01:10
dsCode,
Цитата(dsCode @  24.9.2007,  22:21 Найти цитируемый пост)
это для FF, для IE и Opera - window.event (с маленькой буквы). Равно как и...

Ой ли? Сдается мне, это совсем из другого ряда понятия, одно - http://developer.mozilla.org/en/docs/DOM:event, остальные два - конкретные объекты.

Можно в том же FF наглядно сравнить...
Код
<script>
function test(e) {
  var x='<b>window.Event:</b> ';
  for(var i in window.Event) x+=i+'='+window.Event[i]+'; ';
  x+='<hr><b>Local event object:</b> ';
  for(var i in e) x+=i+'='+e[i]+'; ';
  document.body.innerHTML=x;
}
</script>
<body onclick="test(event)"></body>

Автор: cruelangel 25.9.2007, 01:17
в лисице до window.Event очередь никогда не дойдёт...

Автор: SelenIT 25.9.2007, 01:20
В Опере тоже. Нигде не дойдет, по большому счету smile

Автор: dsCode 25.9.2007, 11:25
SelenIT, да, интрефейс. А если не передавать e параметром, а сразу взять window.event, FF останется без события? var e = window.event; for (var i in  e) {...}

Автор: dstorm81 25.9.2007, 12:16
2dsCode а откуда window.event в gecko????
однозначно определяется


object.onmouseout = function(e) 
{
e = e ||window.event;
}
 остальные еретики

Автор: dsCode 25.9.2007, 13:15
dstorm81, 
Цитата(dstorm81 @  25.9.2007,  12:16 Найти цитируемый пост)
откуда window.event в gecko????

ага, и в правду..

Цитата(dstorm81 @  25.9.2007,  12:16 Найти цитируемый пост)
однозначно определяется

object.onmouseout = function(e) 
{
e = e ||window.event;
}
 остальные еретики

window.event - это "подстраховка" для IE и Оперы? Когда возможны вообще случаи, что "е" не придет?

Автор: cruelangel 25.9.2007, 13:56
ИЕ не посылает. и всё.
впрочем, если вешать через attachEvent, то даже ИЕ посылает событие параметром...

Автор: Ghirik 25.9.2007, 14:03
Цитата

впрочем, если вешать через attachEvent, то даже ИЕ посылает событие параметром.

Во блин... Не знал...  smile 

Автор: dsCode 25.9.2007, 14:09
cruelangel, 
Цитата(cruelangel @  25.9.2007,  13:56 Найти цитируемый пост)
ИЕ не посылает. и всё.
впрочем, если вешать через attachEvent, то даже ИЕ посылает событие параметром... 

угу, а Оперы это тоже касается? Или она посылает "е"?

Автор: Ghirik 25.9.2007, 14:23
Цитата

угу, а Оперы это тоже касается?


Й..ё-п-р-с-т, договорятся они когда ни будь!

Значит, по любому, без "e" не обойтись...

Автор: dsCode 25.9.2007, 14:44
Ghirik, 
Цитата(Ghirik @  25.9.2007,  14:23 Найти цитируемый пост)
Й..ё-п-р-с-т, договорятся они когда ни будь!

я просто интересуюсь =) я на самом деле не знаю )) можно, конечно, быстро проверить самому, но, вдруг, люди растолкуют подробней - "почему это так происходит" =)

Автор: Ghirik 25.9.2007, 14:47
Счас проверю....

Автор: SelenIT 25.9.2007, 14:50
Опера поддерживает событийную модель W3C, в этом она аналогична Лисе. По IE-шному она вроде тоже умеет, но в данной проверке
Цитата

параметр||window.event

она поймает параметр. И дальше пойдет по e.target etc.

Автор: Ghirik 25.9.2007, 14:53
Вот пример из Интернета:

Код

<BODY onload="document.getElementById('btn').attachEvent('onclick', hurrah)">
<script>
function hurrah() {
  alert('Молодец!');
  event.srcElement.detachEvent('onclick', hurrah);
}
</SCRIPT>
<BUTTON id="btn">Нажми меня</BUTTON>
</body>


А не работает, как раз в Mozilla.

Автор: SelenIT 25.9.2007, 14:58
Так event.srcElement - чисто IE-шная фича, в FF используется target.

Автор: Ghirik 25.9.2007, 15:13
http://www.door-to.ru/LamerPhotoBlog/scripts/attachEvent.htm
Валидатор не находит ошибок, а Мозилла ругается на доктип.

Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title></title>
<script type="text/javascript">
<!--
function hurrah(e) {
  alert(e.type);
}
//-->
</script>
</head>
<BODY onload="document.getElementById('btn').attachEvent('onclick', hurrah)">
<BUTTON id="btn">press</BUTTON>
</body>
</html>

Автор: dsCode 25.9.2007, 15:14
Ghirik, для FF там:

Код

document.getElementById('btn').addEventListener('click', hurrah, true);


SelenIT, а вот, внутри hurrah в FF, получается, уже не достучаться до события, если оно не посылается параметром и надо по-любому передавать "е" (ну это к тому, что дело не только в srcElement , а еще раньше - в event).

Автор: Ghirik 25.9.2007, 17:31
Дак что? Получается самым оптимальным такое назначение обработчиков:


Код

object.onmouseout = function(e) 
{
e = e ||window.event;
}

Автор: dsCode 25.9.2007, 17:40
Ghirik, ну "методом от противного", получается - да =)

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