jQuery事件处理程序不在IE中触发

时间:2009-05-08 02:00:33

标签: javascript jquery javascript-events jquery-1.3

我在页面上有一个项目列表,其中包含一组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个小时。

3 个答案:

答案 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)

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

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

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

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

奇怪的是,我还添加了'。'在我回忆起ajax函数之前到innerText。有时我们有时会在ajax加载最终需要之前经历3或4次循环。

这让我觉得document.ready在IE7中运行得非常完美,这似乎打消了一个不可靠的神话。真正“看起来”正在发生的是.load是一个有点不稳定的东西,当页面刚刚加载时不能正常工作。

我仍然有点绿色w /所有jQuery的东西,所以拿这个w /一粒盐。有兴趣听到任何人接受我的小假设。

欢呼

格雷格