Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > mouseout странно работает


Автор: Noviy 8.2.2010, 22:24
Есть форма авторизации. И скрипт, который скрывает форму, если курсор выйден за пределы #authorizing_block. Старнность в том, что курсор "заходит" в блок, всего на несколько пикселей от края(по периметру), дальше форма скрывается(как будто, вложеные элементы выходят за границы authorizing_block ). Firebug показывает, что вложеная форма, за границы родителя не выходит.
Код

<div class="popup" id="authorizing_block">
  <form action="{SERVER_PATH}login/auth" method="POST">
   <table>
     <tr>
       <td>Логин</td>
       <td colspan="2"><div class="popup_border"><div><div>
           <input type="text" name="login" size="25" /></div></div></div></td>
     </tr>
     <tr>
       <td>Пароль</td>
       <td colspan="2"><div class="popup_border"><div><div>
           <input type="password" name="passwd" size="25" /></div></div></div></td>
     </tr>
     <tr>
       <td></td>
       <td class="td_popup_link">
         <a class="popup_link" href="{SERVER_PATH}registration">Регистрация</a><br />
         <a class="popup_link" href="{SERVER_PATH}login/forgot">Забыли пароль?</a>
       </td>
       <td class="popup_enter">
           <input type="hidden" name="refer" value="{PARENT_PAGE}" />
           <input type="hidden" name="get1" value="{GET1_VALUE}" />
           <input type="hidden" name="get2" value="{GET2_VALUE}" />
           <input type="submit" name="enter" value="Войти" /></td>
     </tr>
   </table>
  </form>
</div>


Код

$(document).ready(function(){
         $('#authorizing_block').mouseout(function() {
                hideAuthorizingBlock();
        });
});

function hideAuthorizingBlock(){
  var block = document.getElementById('authorizing_block');
  if(block)
    block.style.display = 'none';
}

Автор: IDVsbruck 8.2.2010, 23:05
Забудь про mouseout и mouseover, у jQuery есть mouseleave и mouseenter.

Автор: 12345c 9.2.2010, 01:46
IDVsbruck не пояснил: mouseout активируется, когда указатель мыши входит/выходит в/из дочернего элемента, в то время как mouseleave этого не делает.

http://jquery-docs.ru/Events/mouseleave/

Если делать без jQuery, надо ставить cancelBubble/stopPropagation() на всех children 1-го уровня.

Автор: Noviy 9.2.2010, 07:58
Благодарю smile

Автор: Noviy 9.2.2010, 10:47
Увы, при попадании на <input  type="text"... Блок скрывается :(

Автор: 12345c 9.2.2010, 13:25
При mouseleave на внешнем блоке?

Автор: Noviy 9.2.2010, 13:27
при переходе на вложенный блок.

Автор: 12345c 9.2.2010, 14:24
При mouseleave на внешнем блоке?
Или при museout?
При втором - так и должно быть (всплывание событий).

Автор: Noviy 9.2.2010, 23:18
при mouseleave 

Автор: 12345c 10.2.2010, 12:32
Значит, в библиотеке недоработано. Поставьте на input явный перехват события onmouseout с return false; .

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)