不确定这是不是错误,或者我不认为这样做。
我有一个带侧边栏的页面,可动态加载主体。
对于page1,我有一个元素#id1的回调,它适用于初始加载。
用户导航到page2后,主内容将被page2的内容替换,page2的内容也包含#id1元素,它们的用途相同。事件也在那里初始化。
问题是第2页上的所有内容都能正常工作,但与#id1相关的事件除外。
如果导航回第1页,#id1也不会正常工作。
在查看控制台后,我发现在调用$(“#id1”)时有时会给我初始加载元素(未销毁?),这可能就是原因。
ajax加载只使用:
$。get(path,function(data){$('#main')。html(data)});
知道这里发生了什么吗?
如果旧元素没有“在jquery中正确销毁”,那么这里假设要做什么。
答案 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;
我认为这会有所帮助。