PDA

Просмотр полной версии : js window.event не работает в IE


Naydav
16.04.2008, 13:24
Сокращаю скрипт:



function _onload()
{
window.onmouseover = _onmouseover;
}

function _onmouseover(event)
{
event = (event) ? event : ((window.event) ? event : null);
var object_id = (event.target) ? event.target.id : ((event.srcElement) ? event.srcElement.id : null);
}


С таким скриптом В ИЕ даже не заходит в функцию!
Меняем window.onmouseover = _onmouseover;
на window.onmouseover = _onmouseover(window.event);

+
Isis помогал решить мне похожую проблему в
http://forum.antichat.ru/thread62540.html


Добавил изменения

function _onload()
{
if (navigator.appName !='Microsoft Internet Explorer')
window.onmouseover = _onmouseover(window.event);
else
window.onmouseover = _onmouseover;
}

function _onmouseover(event)
{

if (navigator.appName !='Microsoft Internet Explorer')
{
event = (event) ? event : ((window.event) ? event : null);
var object_id = (event.target) ? event.target.id : ((event.srcElement) ? event.srcElement.id : null);
}
else
{
var target = null;
if (window.event)
{
event = window.event;
target = event.srcElement;
}
else
{
event = null;
target = event.target;
}

var object_id = (target) ? target.id : null;
}
}


после изменений: в функцию заходит, но target is null

в Mozilla же все работает...
Вот такой вот вопрос

astrologer
16.04.2008, 14:44
Код несколько неверный, но это не важно. Обрати внимание на эту строку:window.onmouseover = _onmouseover(window.event);Важно понять, что происходит. Здесь свойству onmouseover объекта window присваивается значение, которое возвращает функция _onmouseover при запуске с параметром window.event. В данном случае возвращается void undefined. И это происходит только один раз.

Isis
16.04.2008, 14:56
function getEventTarget(e) {
var e = e || window.event;
var targ = e.target || e.srcElement;
if (targ.nodeType == 3) { // боремся с Safari
targ = targ.parentNode;
}
return targ;
}

Naydav
18.04.2008, 19:54
А можно подробнее плз
то есть нужно..

function _onmouseover(event) {

//event = (event) ? event : ((window.event) ? event : null);
//var object_id = (event.target) ? event.target.id : ((event.srcElement) ? event.srcElement.id : null);




var object_id = getEventTarget(event);
alert(object_id);
}

Naydav
18.04.2008, 20:07
Обрати внимание на эту строку:
Код:
window.onmouseover = _onmouseover(window.event);

Код не мой, я вообще изначально бы по другому делал...


function _onload() {
window.onscroll = _onscroll;
window.onmouseover = _ onmouseover;
window.onmouseout = _onmouseout;
}


В Мазилле при движении мыши вызывються _onmouseover и _onmouseout, но в ИЕ это не работает...
Если верхний мой вариант не правильный
window.onmouseover = _ onmouseover();
то как поступить?

astrologer
18.04.2008, 20:51
то как поступить?А какова задача?

Дюша
18.04.2008, 20:53
то как поступить?
забить на ie и в премичании написать юзать FF

Naydav
18.04.2008, 20:53
А какова задача?
var object_id = (target) ? target.id : null;

получить объект object_id

Naydav
18.04.2008, 21:05
Тема не актуальна, я переделал саму логику...
Просто интересно знать на будущее где в коде нужно применять функцию
getEventTarget()

astrologer
18.04.2008, 23:06
Пример:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">
<html>
<head>
<title>Пример.</title>

<style type="text/css">

#dummy
{
border: #AAA solid 1px;
background: #EEE;
width: 200px;
height: 150px;
}

</style>

<script type="text/javascript">

var colors = ['#7E7', '#ADF', '#FA0', '#AAF', '#EEE'];

function addEvent(o, e, f)
{
if(o.addEventListener)
{
o.addEventListener(e, f, false);
}
else if(o.attachEvent)
{
o.attachEvent('on' + e, f);
}
};

addEvent(window, 'load', function()
{
var node = document.getElementById('dummy');

/*
В Mozilla ссылка на объект event передаётся параметром в функцию-обработчик.
В IE существует глобальный объект window.event
Opera великодушно поддерживает и то, и другое.
*/

addEvent(node, 'mouseover', function(e)
{
// если "e" не определено - используем window.event:

e = e || window.event;

// Аналогично:
var t = e.target || e.srcElement;

// Делаем что-нибудь:
colors.push(t.style.backgroundColor = colors.shift());
});
});

</script>

</head>
<body>

<div id="dummy"></div>

</body>
</html>