我有一个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-IE7中的菜单似乎没有正确地注册菜单(是的,MS,IE7中真的是一个“新的渲染引擎”,我们都相信你).
它的工作原理与其他一切.
你可以看到a basic demo here的行为.
在演示中您可以看到两个问题的例子:
>按钮后面的图像应该在悬停上改变(用CSS:悬停选择器完成).它在第一个鼠标悬停时起作用,但仍然存在.
>点击事件不会触发 – 但是使用开发工具,您可以手动调用它,它仍然被订阅.
您可以在IE8的开发工具中看到(2):
>在IE8中打开page
>打开开发工具
>选择“脚本”选项卡和“控制台”子选项卡
>类型:$j(‘#testFloat div.ico:first’).click()手动调用任何订阅的事件
>页面上会有一个警报
这意味着我不会丢失事件订阅,他们仍然在那里,IE只是在我点击时不打电话给他们.
有没有人知道为什么这个bug发生(除了仅仅因为IE的尊贵引擎)?
有解决方法吗?
这可能是我做错了的事情,正好在其他事情上正常工作吗?
解决方法
奇怪的是,虽然您的点击事件在IE中未触发,但如果您将其更改为mousedown或鼠标,则可以像您预期的那样工作,但仍然有您的图像悬停问题.
$j('div.ico').mouseup(function() { alert($j(this).parent().html()); });