jQuery不执行绑定到动态创建的元素的处理程序

时间:2011-12-18 08:11:08

标签: jquery

我正在使用Jquery动态加载我的网站页面。基本上隐藏和显示div,具体取决于您单击的主菜单选项。

问题在于每页上的子菜单;页面更改时菜单会更改。我清空<ul>并在每次更改页面时附加新的<li>

我有jquery悬停并单击与子菜单<li>一起使用的功能,它们仅在页面刷新时才有效。这些函数似乎停止工作,因为我删除了<li>然后添加新的函数。

我不明白为什么这些功能不只是转到新的<li>

为什么会这样?

3 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。 jQuery只能将事件绑定到加载jQuery脚本时存在的元素(页面加载)。为了使事件能够影响新创建的元素,您需要在代码中添加.live。 像这样:

$(".menu").live("hover", function(){
  // your action here
});

有关此内容的更多信息,请访问http://api.jquery.com/live/ 我相信有一些额外的命令,比如.bind等做同样或类似的事情,但我总是使用.live 我希望有所帮助!

答案 1 :(得分:1)

新的,不推荐的方法是使用.on()处理程序,从jQuery 1.7开始。如果您使用此版本而不是.live(),请使用:

$('#menu').on('hover', 'li', function() { ... });

答案 2 :(得分:0)

根据我的理解,你的问题可能没有使用.live()方法..请参阅http://api.jquery.com/live/。当添加新的li时,DOM已经被加载,因此你的新li标签不符合附加.hover()或任何你想要的事件。这可能不是你想要的那样..但必须足够接近