в javascript onmouseout, как заставить работать, если курсор вне блока? - PullRequest
0 голосов
/ 16 августа 2011

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

когда я захожу на консоль, запускается триггер onmouseout, где и e.target, и e.currentTarget - это сам div, событие запускается дважды , сначала при вводе div и затем оставляя div.

Во-первых, это не имеет смысла для меня - почему это происходит? во-вторых, есть ли здесь стандартная логика?

<час /> все HTML генерируется Вот некоторый код, который создает модальный и прикрепляет триггер mouseout

// code creates the modal div from the menu
get:    function( e ) {
        util.popup( E.h4( "Maintenance Menu:" ),
           E.ul(  E.a( '#', maintenance.users, 'Users (Logins)' ),
                  E.a( '#', maintenance.employees, 'Employees' ),
                  E.a( '#', maintenance.skills, 'Skill Types' ),
                  E.a( '#', maintenance.etps, 'Expense Types' ),
                  E.a( '#', maintenance.menus, 'Menu Items' ) ),
            E.div(  E.button( maintenance.done, "s.width:90%", "Finished" ) ) );
         util.popup_dom().addEventListener( 'mouseout',util.popout() );
        },

popup() создает модал и помещает его в тело, popout() удаляет его.

<ч />

решение (согласно первому ответу - спасибо!) С помощью mouseover для установки mouseout:

:
util.popup(...);
var outSet = false;  // whether mouseout trigger has been set
util.popup_dom().addEventListener( 'mouseover',function(e) {
   if( !outSet ) {
      setTimeout( function() { 
         util.popup_dom().addEventListener('mouseout',function(e){util.popout();} ),
         200 );
      outSet = true;
    }
} );

1 Ответ

1 голос
/ 16 августа 2011

Вы можете зарегистрировать только onmouseout слушатель onmouseover:

var closeModalDiv = function () { ... };

addEventListener(modalDiv, 'mouseover', function () {
    addEventListener(modalDiv, 'mouseout', closeModalDiv);
});

(Предполагается, что вы используете нестандартный метод кросс-браузерного события с именем addEventListener; вам придется настроить его так, как вы регистрируете события.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...