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

Javascript jquery在ajax调用之后,具有相同ID的事件停止工作,javascript,jquery,javascript-events,Javascript,Jquery,Javascript Events,不确定这是一个bug还是我不想这样做 我有一个带有侧栏的页面,可以动态加载主体 对于page1,我有一个元素#id1的回调,它在初始加载时工作 用户导航到page2后,主要内容将被page2的内容替换,其中还有一个带有#id1的元素,它们具有相同的用途。事件也在那里初始化 问题是,除了与#id1相关的事件外,第2页上的所有内容都可以工作 如果导航回第1页,#id1也不起作用 查看控制台后,我发现在调用$(“#id1”)时,有时会给我初始加载元素(未销毁?),这可能就是原因 ajax加载只使用:

不确定这是一个bug还是我不想这样做

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

对于page1,我有一个元素#id1的回调,它在初始加载时工作

用户导航到page2后,主要内容将被page2的内容替换,其中还有一个带有#id1的元素,它们具有相同的用途。事件也在那里初始化

问题是,除了与#id1相关的事件外,第2页上的所有内容都可以工作

如果导航回第1页,#id1也不起作用

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

ajax加载只使用:

$.get(路径,函数(数据){$('#main').html(数据)})

知道这是怎么回事吗


如果旧元素没有“在jquery中正确销毁”,那么这里应该怎么做

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

jQuery 1.7+:
on()


jQuery请记住,ID只应出现一次

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


这样,您就可以使用jQuery的
.live()
绑定到已动态加载的元素。

您必须为此生成动态id。当您单击右栏选项时,将生成id并将id放置在主体元素“id”标记中。这样您就知道为哪个页面生成哪个id。在“onclick”事件上调用javascript函数,并将该id传递给该函数,然后以
$(“#id”+生成的_id)的形式调用body元素

我想这会有帮助。

太棒了!Thx人!!我一直教导,如果使用
.bind
或使用
.on
使用
绑定,则不会产生任何差异。bind
直接绑定到选择器指定的元素。如果稍后添加与选择器匹配的新元素,则这些元素将不会绑定任何事件。使用
.live
/
.on
将确保即使是新创建的元素也会响应绑定事件,尽管这会使它们变慢,因此您应该只在需要时使用它们。嗯,问题是Id只出现一次,但是如果使用ajax重新加载页面,绑定现在不同了,每次加载页面时都更改id是没有意义的。T_ut
$(document).on('click', '.selector', function() { ... });
$('.selector').live('click', function() { ... });