Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Неправильно срабатывает onmouseout (https://javascript.ru/forum/events/19105-nepravilno-srabatyvaet-onmouseout.html)

Slavenin 26.07.2011 12:58

Неправильно срабатывает onmouseout
 
Всем доброго времени суток!

Есть простенький див с вложенной в него таблицей, который создается программно в нужном месте.

<DIV id="submenu" class="submenu">
  <TABLE>
    <TBODY>
      <TR>
        <TD>
          <A href="sub1.php">Подменю1</A>
        </TD>
      </TR>
      <TR>
        <TD>
          <A href="sub2.php">Подменю2</A>
        </TD>
      </TR>
      <TR>
        <TD>
          <A href="sub3.php">Подменю3</A>
        </TD>
      </TR>
    </TBODY>
  </TABLE>
</DIV>


далее я прописываю ему обработчик

var obj = document.getElementById('submenu')
obj.onmouseout = subHandler;


который должен удалять этот див. Проблема в том, что событие срабатывает не когда курсор выходит за пределы дива, а когда он заходит во вложенную таблицу о_О. Теоретически понятно, что таблица это уже другой элемент, но как тогда сделать чтобы событие срабатывало только на выходе из дива? Пробовал прописать событие таблице, результат тот же, только срабатывание происходит при наведении на строку.

dmitriymar 26.07.2011 13:16

mouseleave

Slavenin 26.07.2011 13:39

dmitriymar,
благодарю! даж не слышал о таком событии
в опере, ие и мозиле - работает, в хроме - нет, хотя событие прописалось, но вызова обработчика не происходит:-?

dmitriymar 26.07.2011 13:51

посмотри доки по событиям для хрома. я с этим событием не работал-не знаю ,возможно в хроме у него другое название

dmitriymar 26.07.2011 14:15

не только хром.походу и в фф5, сафари тоже молчит...

Slavenin 26.07.2011 15:59

название у него такое же, нашел тему на багтрекере хрома, вроде как эту проблему пофиксили, но событие не отрабатывает, может кто сталкивался с этим?

melky 27.07.2011 14:52

ну так детектите сами , что поддерживается


var el = document.createElement('div');

alert([ 'onmouseout' in el, 'onmouseleave' in el ])

Chrome 12: true, false

...
может вы всплытие не учитываете?
<DIV id="submenu" class="submenu" style="border:1px solid">
  <TABLE>
    <TBODY>
      <TR>
        <TD>
          <A href="sub1.php">Подменю1</A>
        </TD>
      </TR>
      <TR>
        <TD>
          <A href="sub2.php">Подменю2</A>
        </TD>
      </TR>
      <TR>
        <TD>
          <A href="sub3.php">Подменю3</A>
        </TD>
      </TR>
    </TBODY>
  </TABLE>
</DIV>
<script>
var obj = document.getElementById('submenu')
obj.onmouseout = function(e){
    if( e.target.id == "submenu")
        alert( "yahoo!" );
}
</script>


Часовой пояс GMT +3, время: 13:23.