Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   js window.event не работает в IE (https://forum.antichat.xyz/showthread.php?t=67465)

Naydav 16.04.2008 13:24

js window.event не работает в IE
 
Сокращаю скрипт:


PHP код:

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


Добавил изменения
PHP код:

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

PHP код:

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



Naydav 18.04.2008 19:54

А можно подробнее плз
то есть нужно..

PHP код:

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);
Код не мой, я вообще изначально бы по другому делал...

PHP код:

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


В Мазилле при движении мыши вызывються _onmouseover и _onmouseout, но в ИЕ это не работает...
Если верхний мой вариант не правильный
PHP код:

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>



Время: 14:55