我有一个 IE 错误,我不确定如何修复。
使用 jQuery,我动态移动菜单以在鼠标悬停时出现在元素上。
我的代码(简化)如下所示:
$j = jQuery.noConflict();
$j(document).ready(function()
{
//do something on the menu clicks
$j('div.ico').click(function() { alert($j(this).parent().html()); });
setUpActions('#tableId', '#menuId');
});
//on mouseover set up the actions menu to appear on mouseover
function setUpActions(tableSelector, menuSelector)
{
$j(tableSelector + ' div.test').mouseover(function()
{
//note that append will move the underlying
//DOM element with all events from it's old
//parent to the end of this one.
$j(this).append($j(menuSelector).show());
});
}
在 IE7、IE8 和 IE8-as-IE7 中移动后,该菜单似乎没有为菜单正确注册事件(是的,MS,这确实是 IE8 中的“新渲染引擎”,我们都相信你)。
它在其他所有方面都按预期工作。
您可以在此处查看基本演示中的行为。
在演示中,您可以看到该问题的两个示例:
- 按钮后面的图像应在悬停时更改(使用 CSS :hover 选择器完成)。它在第一次鼠标悬停时有效,但随后仍然存在。
- click 事件不会触发 - 但是使用开发工具您可以手动调用它并且它仍然被订阅。
可以在 IE8 的开发工具中看到(2):
- 在 IE8 中打开页面
- 打开开发工具
- 选择“脚本”选项卡和“控制台”子选项卡
- 类型:
$j('#testFloat div.ico:first').click()
手动调用任何订阅的事件 - 页面会有提示
这意味着我不会丢失事件订阅,它们仍然存在,当我单击时,IE 只是没有调用它们。
有谁知道为什么会出现这个错误(不仅仅是因为 IE 的古老引擎)?
有解决方法吗?
会不会是我做错了什么,只是碰巧在其他所有事情上都按预期工作?