由于某种原因,jQuery (1.6.2) 无法将鼠标悬停处理程序附加到 Flash 对象。
有趣的是,getElementById().onmouseover = ...
按预期工作。
// fail
$('#content-banner').mouseover(function () {alert(1)});
// success
document.getElementById("content-banner").onmouseover = function (evt) { alert(3); };
See the jsFiddle 的实例 http://jsfiddle.net/xaCp7/5/了解详情。
是什么阻止 jQuery 附加处理程序?
Update
一个快速解决方法是使用live()
正如建议的尚卡尔·桑戈利 https://stackoverflow.com/questions/7042648/why-does-jquery-fail-to-attach-a-mouseover-handler-to-a-flash-object/7042749#7042749。然而问题仍然存在。为什么 jQuery 无法附加处理程序?
jQuery 不支持data()
on <applet>
, <embed>
, and <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 事件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)