div onmouseout не работает должным образом - PullRequest
0 голосов
/ 01 февраля 2012

Текст и пример кода, адаптированные из http://www.webdeveloper.com/forum/archive/index.php/t-65078.html,, могут не отражать фактический вопрос:

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

<div onmousemove="move()" onmouseout="out()">
  <div id="dvRep"> </div>
    <table>
        <tr><td>ITEM 1</td></tr>
        <tr><td>ITEM 2</td></tr>
        <tr><td>ITEM 3</td></tr>
        <tr><td>ITEM 4</td></tr>
        <tr><td>ITEM 5</td></tr>
    </table>
</div>

<div id="divChartPopupMenu">
    Hide me.     
</div>

Всякий раз, когда я перемещаю мою мышь в div, она правильно вызывает функцию перемещения, но атрибут onmouseout работает не так, как я думал.я думал, что функция out() будет вызываться только в том случае, если вы переместите указатель мыши с div, но out() вызывается всякий раз, когда я перемещаюсь из одной из строк таблицы.поэтому, если моя мышь находится в ряду, и я перехожу к следующему ряду, это вызывает out().я хочу, чтобы out() вызывался только тогда, когда пользователь покидает весь div.какие-нибудь идеи?

То, что я пытаюсь, - это функция, я скрываю еще один div.

Ответы [ 3 ]

4 голосов
/ 20 апреля 2015

onmouseleave это то, что сработало для меня.

3 голосов
/ 01 февраля 2012

Я предлагаю вам прочитать эту статью о 3 фазах событий JavaScript.
http://www.quirksmode.org/js/events_order.html

в функции move или out вы можете проверить, имеет ли srcElement (IE) или target (W3C) идентификатор с именем dvRep.

это должно выглядеть примерно так:

function out(event)
{
   event.stopPropagation(); //cancel bubbling

   ele = event.target || event.srcElement
   if (ele.id === "dvRep"){  
      //your code
   }
}
3 голосов
/ 01 февраля 2012

Похоже, у вас возникли проблемы с пузырями событий.

Когда вы наводите tr, ваша мышь больше не «в» div - поэтому, когда вы перемещаетесь между ними, вы идете tr (out) -> div (in) -> div (out) -> tr (in).Вот почему ваша out() функция вызывается между tr.

Полезное чтение:

...