我在页面上有一个项目列表,其中包含一组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中运行良好..工具进入当前行,click事件调用ajax函数。但是,在IE6和IE7中没有发生任何点击。我尝试在鼠标输出上取消绑定并在每个鼠标悬停时重新绑定..但无济于事。
我还研究了javascript之外的各种原因(例如透明的png冲突,z-index,position:absolute)..也没有找到解决方案。
我最终需要为每个项目添加工具行,并在鼠标上/下显示/隐藏。同样适用 - 唯一的挫折是我的页面上有更多'工具'标记。
有人知道为什么IE移动对象后会忽略/删除/杀死鼠标事件(使用前置)?为什么事后重新绑定事件也没有效果?在我放弃之前,让我生气了将近2个小时。
答案 0 :(得分:8)
IE将丢失事件,具体取决于您向DOM添加内容的方式。
var ele = $("#itemtocopy");
$("#someotheritem").append( ele ); // Will not work and will lose events
$("#someotheritem").append( ele.clone(true) );
我还建议在点击事件上使用.live()来简化你的代码。现在还不支持鼠标悬停/退出。 http://docs.jquery.com/Events/live
答案 1 :(得分:2)
我只花了整整一天的时间来解决事件没有触发附加到DOM的项目(IE7,jQuery 1.4.1),这不是因为我需要使用live()(不过,很高兴知道,Chad) ,也不是因为我需要克隆这些物品。
这是因为我选择了锚点标签,其中包含“#”,如下所示:
var myitem = $('a[href=#top]');
我的解决方案是使用“属性包含选择器”,如下所示:
var myitem = $('a[href*=top]');
幸运的是,我已经足够控制将来不会破坏的所有东西。这在技术上与附加对象无关,但希望能节省一些时间。
答案 2 :(得分:0)
我发现了一个似乎可以解决这个问题的黑客攻击。
我有加载调用回调,divLoaded()。
在divLoaded中我检查$('#targetdiv')。innerText.length< 50或任何你认为会表明它没有加载。如果我检测到这种情况,我只需调用函数taht再次加载div。
奇怪的是,我还添加了'。'在我回忆起ajax函数之前到innerText。有时我们有时会在ajax加载最终需要之前经历3或4次循环。
这让我觉得document.ready在IE7中运行得非常完美,这似乎打消了一个不可靠的神话。真正“看起来”正在发生的是.load是一个有点不稳定的东西,当页面刚刚加载时不能正常工作。
我仍然有点绿色w /所有jQuery的东西,所以拿这个w /一粒盐。有兴趣听到任何人接受我的小假设。
欢呼格雷格