2010-04-10 61 views
0

下面的这个例子工作时,悬停事件被触发,当它不是,它的工作元素已经在DOM中,但当元素动态创建它不工作,我意识到我需要使用jQuery生活()或委托()这一点,就是我试图修改它和它没有产生结果不如预期,这里是工作代码:如何修改这个jQuery语法

$(".sidebar li").hover(
     function(){ 
     $(this).css("background-color", "#F9F4D0"); 
     $(this).append($('<button class="promoter" type="button" title="Active promotion"></button>')); 
        }, 
     function(){ 
     $(this).css("background-color", "#F9FAFA"); 
     $(this).children("button").remove(); 
       }  
        ); 

这里是我想补充活位,但它不会产生正确的结果:

$(".sidebar li").live('hover', function(){ 
     $(this).css("background-color", "#F9F4D0"); 
     $(this).append($('<button class="promoter" type="button" title="Active promotion"></button>')); 
        }, 
     function(){ 
     $(this).css("background-color", "#F9FAFA"); 
     $(this).children("button").remove(); 
       }  
        ); 

我在哪里犯了错误,谢谢你

回答

2

你可以这样做:

$(".sidebar li").live('mouseenter', function(){ 
    $(this).css("background-color", "#F9F4D0"); 
    $(this).append($('<button class="promoter" type="button" title="Active promotion"></button>')); 
}).live('mouseleave', function(){ 
    $(this).css("background-color", "#F9FAFA"); 
    $(this).children("button").remove(); 
}); 

.live('hover', function() {})速记作品之类的东西$(this).children().slideToggle()什么的,但对于这一点,你需要直接使用mouseentermouseleave事件,同样的事件.hover()实际结合。

+0

gr8它的工作我只需要等待答案被接受。谢谢,你有任何书籍推荐jQuery,如何更好/最终掌握它? – 2010-04-10 20:02:39

+0

@甘道夫 - 我不确定,从来没有读过任何...有点了解它,因为我遇到了我需要的新东西。一位开发人员阅读了这篇文章,但他学到了很多东西,评论看起来也不错:http://www.amazon.com/Learning-jQuery-Interaction-Development-JavaScript/dp/1847192505 – 2010-04-10 20:08:35

1

确保您使用的是jQuery 1.4或更高版本和according to the docs,您需要使用mouseenter和mouseleave而不是悬停。