6

我在页面上有一个项目列表,其中包含一组用于 MoveUp、MoveDown 和 Delete 的控件。

默认情况下,控件位于隐藏列表的顶部。当您将鼠标悬停在项目行上时,我使用 jquery 选择控件

//doc ready function:
..
var tools = $('#tools');
$('#moveup').click(MoveUp);
$('#movedn').click(MoveDn);
$('#delete').click(Delete);
..
$('li.item').mouseover(function(){
    $(this).prepend(tools);
});

这在 Firefox 中效果很好。工具移动到当前行,点击事件调用 ajax 函数。但是,在 IE6 和 IE7 中 .. 没有点击发生。我尝试在鼠标悬停时取消绑定并在每次鼠标悬停时重新绑定......但无济于事。

我还调查了 javascript 之外的各种原因(例如透明 png 冲突、z-index、位置:绝对).. 也没有找到解决方案。

我最终需要为每个项目添加一个工具行,并在鼠标悬停/移出时显示/隐藏。效果一样好——唯一令人沮丧的是我的页面上有更多的“工具”标记。

有谁知道为什么 IE 在移动对象后会忽略/丢弃/杀死鼠标事件(使用前置)?为什么事后重新绑定事件也没有效果?在我放弃之前,让我恼火了将近 2 个小时。

4

3 回答 3

8

IE 将丢失事件,具体取决于您向 DOM 添加内容的方式。

var ele = $("#itemtocopy");

$("#someotheritem").append( ele ); // Will not work and will lose events

$("#someotheritem").append( ele.clone(true) );

我还建议在点击事件上使用 .live() 来稍微简化您的代码。Live 尚不支持鼠标悬停/移出。http://docs.jquery.com/Events/live

于 2009-05-08T02:06:42.230 回答
2

我只是花了一整天的时间来排除事件没有触发附加到 DOM 的项目(IE7,jQuery 1.4.1),这不是因为我需要使用 live()(不过,很高兴知道,Chad),也不是这是因为我需要克隆这些项目。

这是因为我选择了其中有“#”的锚标签,如下所示:

var myitem = $('a[href=#top]');

我的解决方案是像这样使用“属性包含选择器”:

var myitem = $('a[href*=top]');

幸运的是,我有足够的控制权来控制它在未来不太可能破坏的一切。这在技术上与附加对象无关,但希望它可以节省一些时间。

于 2010-02-10T05:10:06.253 回答
0

我有一个类似的问题。尝试使用 .ready 在初始页面加载时加载 div。在 FF 中运行良好,但在 ie7 中运行良好。

我发现了一个似乎可以解决这个问题的黑客。

我有负载调用回调,divLoaded()。

在 divLoaded 我检查 $('#targetdiv').innerText.length < 50 或任何你认为会表明它没有加载的东西。如果我检测到这种情况,我只需调用函数 taht 再次加载该 div。

奇怪的是,我还添加了一个“。” 在我回忆起 ajax 函数之前到 innerText。似乎有时我们在 ajax 加载最终需要之前要经过 3 或 4 个循环。

这让我认为 document.ready 在 IE7 中工作得非常完美,这似乎消除了一些关于它不可靠的神话。真正“似乎”发生的是 .load 有点不稳定,并且在刚刚加载页面时无法正常工作。

我对所有 jQuery 的东西还是有点绿,所以把这个和一粒盐一起吃吧。有兴趣听听任何人对我的小假设的看法。

干杯

格雷格

于 2009-10-14T04:50:11.207 回答