在ajax调用之后的jquery,具有相同Ids的事件停止工作

时间:2011-12-21 08:18:27

标签: javascript jquery javascript-events

不确定这是不是错误,或者我不认为这样做。

我有一个带侧边栏的页面,可动态加载主体。

对于page1,我有一个元素#id1的回调,它适用于初始加载。

用户导航到page2后,主内容将被page2的内容替换,page2的内容也包含#id1元素,它们的用途相同。事件也在那里初始化。

问题是第2页上的所有内容都能正常工作,但与#id1相关的事件除外。

如果导航回第1页,#id1也不会正常工作。

在查看控制台后,我发现在调用$(“#id1”)时有时会给我初始加载元素(未销毁?),这可能就是原因。

ajax加载只使用:

$。get(path,function(data){$('#main')。html(data)});

知道这里发生了什么吗?

如果旧元素没有“在jquery中正确销毁”,那么这里假设要做什么。

3 个答案:

答案 0 :(得分:6)

虽然目前还不清楚您的绑定是什么,但解决方案是使用(取决于您的jQuery版本)live()on()来确保绑定到元素在执行时不在DOM中。

jQuery 1.7+:on()

$(document).on('click', '.selector', function() { ... });

jQuery< 1.7:live()

$('.selector').live('click', function() { ... });

答案 1 :(得分:1)

请记住,ID只应出现一次

因为你不知道在Ajax调用之后,ID的哪些元素仍然存在于DOM中,所以你应该坚持使用classname

通过它,您可以使用jQuery的.live()绑定到已动态加载的元素。

答案 2 :(得分:1)

您必须为此生成动态ID。当您单击右侧栏选项时,将生成id并将id放在body元素“id”标记中。因此,您知道为哪个页面生成了哪个ID。在“onclick”事件上调用javascript函数并将该id传递给此函数,然后将body元素调用为$("#id"+that generated_id).something; 我认为这会有所帮助。