Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.08.2011, 22:23
Интересующийся
Отправить личное сообщение для capscom Посмотреть профиль Найти все сообщения от capscom
 
Регистрация: 28.08.2011
Сообщений: 28

Jquery, всплывание событий
Привет всем.

Есть такой кусок верстки:

<table id="messages" width="957">
           <tr valign="top">
                       <td width="500">
                                    <div class="confirm-container"></div>
                      </td>
           </tr>
 </table>


Стиль div:

.confirm-container 
{
                                position: absolute;                           
                                width: 174px;
                                height: 78px;
                                border: 1px black solid; 
                                margin-left: 1000px;     
}


.confirm-container находится в стороне относительно всей таблицы, за счет margin-left.

$('#messages tr').mouseenter(function(event){
              alert('1');
 })


Подскажите, пожалуйста, почему при наведении на .confirm-container всплывает событие до #messages tr и срабатывает нем (хотелось бы чтобы событие срабатывало только на #messages tr. ) ??? И как от этого избавиться?
Ответить с цитированием
  #2 (permalink)  
Старый 28.08.2011, 23:06
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

уберите контейнер confirm-container из этой таблицы.
Ответить с цитированием
  #3 (permalink)  
Старый 28.08.2011, 23:09
Интересующийся
Отправить личное сообщение для capscom Посмотреть профиль Найти все сообщения от capscom
 
Регистрация: 28.08.2011
Сообщений: 28

Сообщение от devote Посмотреть сообщение
уберите контейнер confirm-container из этой таблицы.
Этот див пихает плагин jq. Мне скорее интересно, почему срабатывают события на элементе, к которому они не имеют отношения, к div. То есть, почему всплытие начинается с него.
Ответить с цитированием
  #4 (permalink)  
Старый 28.08.2011, 23:58
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

ну у функции addEventListener есть третий параметр capture указывающий на то как обрабатывать событие на всплытие или погружение, если стоит false происходит всплытие события от дочернего к родительскому элементу, если стоит true то наоборот. Но данный метод работает не во всех браузерах. Например в тех в которых нет метода addEventListener к ним относиться IE <= 8. По умолчанию во всех библиотеках этот параметр имеет значение false
Ответить с цитированием
  #5 (permalink)  
Старый 29.08.2011, 00:18
Интересующийся
Отправить личное сообщение для capscom Посмотреть профиль Найти все сообщения от capscom
 
Регистрация: 28.08.2011
Сообщений: 28

Сообщение от devote Посмотреть сообщение
ну у функции addEventListener есть третий параметр capture указывающий на то как обрабатывать событие на всплытие или погружение, если стоит false происходит всплытие события от дочернего к родительскому элементу, если стоит true то наоборот. Но данный метод работает не во всех браузерах. Например в тех в которых нет метода addEventListener к ним относиться IE <= 8. По умолчанию во всех библиотеках этот параметр имеет значение false
А как же быть? есть ли кроссбраузерное решение данной проблемы?
Ответить с цитированием
  #6 (permalink)  
Старый 29.08.2011, 01:29
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от capscom
А как же быть? есть ли кроссбраузерное решение данной проблемы?
Увы пока существуют браузеры не поддерживаемые это решения нет.
Ответить с цитированием
  #7 (permalink)  
Старый 29.08.2011, 04:11
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Ну как же, можно ведь проверять в обработчике:
if(this.tagName === 'TR') {
}
Ответить с цитированием
  #8 (permalink)  
Старый 29.08.2011, 04:41
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

А вообще кроссбраузерное решение можно реализовать, но придется все управление событиями взять на себя... То-есть сделать промежуточный некий сервис событий. Но это муторная задача и вряд ли претендует на то что бы ее реализовывать. Может пару лет назад она и была бы актуальна, но сейчас уже увы она не считается такой уж необходимой.
Ответить с цитированием
  #9 (permalink)  
Старый 29.08.2011, 10:09
Интересующийся
Отправить личное сообщение для capscom Посмотреть профиль Найти все сообщения от capscom
 
Регистрация: 28.08.2011
Сообщений: 28

devote, FINoM

Спасибо большое! А не могли бы Вы пояснить, почему при навешивании события на tr, высплытие начинается с дочернего элемента. Вот это как-то вообще не пойму.
Ответить с цитированием
  #10 (permalink)  
Старый 29.08.2011, 10:31
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

рекомендуемо к прочтению
http://javascript.ru/tutorial/events
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
2 разных модуля на jQuery - как подключить? finder jQuery 4 23.03.2012 22:29
JQuery отложенная обработка событий hover DemonWather jQuery 2 09.03.2011 09:01
jQuery object в xpath. Глобальные события solarix jQuery 1 29.10.2010 16:40
jQuery jTreeMenu plugin Seafnox jQuery 9 12.01.2010 21:55
JQuery + FireFox NOOB jQuery 4 02.11.2009 18:16