js window.event не работает в IE

Discussion in 'PHP' started by Naydav, 16 Apr 2008.

  1. Naydav

    Naydav Elder - Старейшина

    Joined:
    30 Dec 2006
    Messages:
    439
    Likes Received:
    63
    Reputations:
    4
    Сокращаю скрипт:


    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 помогал решить мне похожую проблему в
    /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 же все работает...
    Вот такой вот вопрос
     
    #1 Naydav, 16 Apr 2008
    Last edited: 16 Apr 2008
  2. astrologer

    astrologer Elder - Старейшина

    Joined:
    30 Aug 2007
    Messages:
    837
    Likes Received:
    267
    Reputations:
    59
    Код несколько неверный, но это не важно. Обрати внимание на эту строку:
    Code:
    window.onmouseover = _onmouseover(window.event);
    Важно понять, что происходит. Здесь свойству onmouseover объекта window присваивается значение, которое возвращает функция _onmouseover при запуске с параметром window.event. В данном случае возвращается void undefined. И это происходит только один раз.
     
    1 person likes this.
  3. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,194
    Reputations:
    252
    PHP:
    function getEventTarget(e) {
        var 
    || window.event;
        var 
    targ e.target || e.srcElement;
        if (
    targ.nodeType == 3) { // боремся с Safari
        
    targ targ.parentNode;
        }
        return 
    targ;
    }
     
    1 person likes this.
  4. Naydav

    Naydav Elder - Старейшина

    Joined:
    30 Dec 2006
    Messages:
    439
    Likes Received:
    63
    Reputations:
    4
    А можно подробнее плз
    то есть нужно..

    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); 
    }
     
  5. Naydav

    Naydav Elder - Старейшина

    Joined:
    30 Dec 2006
    Messages:
    439
    Likes Received:
    63
    Reputations:
    4
    Код не мой, я вообще изначально бы по другому делал...

    PHP:
    function _onload() {
        
    window.onscroll     _onscroll;
        
    window.onmouseover  _ onmouseover;
        
    window.onmouseout   _onmouseout;
    }
    В Мазилле при движении мыши вызывються _onmouseover и _onmouseout, но в ИЕ это не работает...
    Если верхний мой вариант не правильный
    PHP:
    window.onmouseover _ onmouseover();
    то как поступить?
     
    #5 Naydav, 18 Apr 2008
    Last edited: 18 Apr 2008
  6. astrologer

    astrologer Elder - Старейшина

    Joined:
    30 Aug 2007
    Messages:
    837
    Likes Received:
    267
    Reputations:
    59
    А какова задача?
     
  7. Дюша

    Дюша Banned

    Joined:
    9 Dec 2007
    Messages:
    161
    Likes Received:
    77
    Reputations:
    -13
    забить на ie и в премичании написать юзать FF
     
  8. Naydav

    Naydav Elder - Старейшина

    Joined:
    30 Dec 2006
    Messages:
    439
    Likes Received:
    63
    Reputations:
    4
    var object_id = (target) ? target.id : null;

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

    Naydav Elder - Старейшина

    Joined:
    30 Dec 2006
    Messages:
    439
    Likes Received:
    63
    Reputations:
    4
    Тема не актуальна, я переделал саму логику...
    Просто интересно знать на будущее где в коде нужно применять функцию
    getEventTarget()
     
  10. astrologer

    astrologer Elder - Старейшина

    Joined:
    30 Aug 2007
    Messages:
    837
    Likes Received:
    267
    Reputations:
    59
    Пример:
    Code:
    <!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>