Почему jQuery не может присоединить обработчик наведения мыши к объекту Flash? - PullRequest
5 голосов
/ 12 августа 2011

По какой-то причине jQuery (1.6.2) не удается подключить обработчик наведения мыши к Flash-объекту.

Забавно, но getElementById().onmouseover = ... работает как положено.

// fail
$('#content-banner').mouseover(function () {alert(1)});
// success
document.getElementById("content-banner").onmouseover = function (evt) { alert(3); };

См. живой пример на jsFiddle для подробностей.

Что мешает jQuery подключить обработчик?


Обновление

Aбыстрое решение - использовать live(), как предложено ShankarSangoli .Однако вопрос все еще остается. Почему jQuery не может подключить обработчик?

Ответы [ 2 ]

14 голосов
/ 14 августа 2011

jQuery не поддерживает data() на <applet>, <embed> и <object>.Поскольку стек обработчика событий jQuery зависит от data(), то вызов объекта mouseover() для объекта будет неудачным.

Так что, если вы не используете обработку событий jQuery, все будет хорошо:

var banner = $('#content-banner');
banner.live ( 'mouseover', ... ); // works, becuse live hooks to document not to banner
banner[0].onmouseover = ... ; // works
banner[0].addEventListener('mouseover', ... , false); // also works

Если вы покопаетесь в коде, вы увидите, что есть исключение для объектов с classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000', то есть Flash, однако classid работает только для IE.Итак, короткий ответ - избегать использования событий jQuery на объектах.

5 голосов
/ 12 августа 2011

Используйте jQuery live. Поскольку флэш-память инициализируется после загрузки страницы, поэтому она не может найти элемент. Работает Демо


Обновление

Повторение Ответ Шипи : jQuery поддерживает обработчики событий в data элемента dom, но так как он не поддерживает data () для событий, они никогда не присоединяются.Альтернатива - использовать live, который прикрепит событие к корневому документу, но будет работать как положено.

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