jQuery ajax调用后,具有相同id的事件停止工作
jQuery after ajax call, events with the same Ids stopped working
不确定这是一个bug还是我不应该这样做
我有一个带有侧栏的页面,它可以动态加载主体。
对于page1,我有一个元素#id1
的回调,它在初始加载时工作。
在用户导航到page2后,主要内容将被page2的内容所取代,其中也有一个具有#id1
的元素,它们具有相同的目的。事件也在那里初始化。
问题是第2页上的所有内容都可以工作,除了与#id1
相关的事件。
如果返回到第1页,#id1
将不能正常工作。
查看控制台后,我发现在调用$("#id1")
时有时会给我初始加载元素(而不是销毁?),这可能是原因。
ajax加载只是使用:
$.get(path, function(data) {$('#main').html(data)});
你知道这是怎么回事吗?
如果旧的元素没有"在jquery中正确销毁",应该在这里做什么呢?
虽然不清楚您要绑定的确切内容,但解决方案是使用(取决于您的jQuery版本)live()
或on()
来确保绑定到执行时不在DOM中的元素。
jQuery 1.7+: on()
$(document).on('click', '.selector', function() { ... });
jQuery <1.7: live()
$('.selector').live('click', function() { ... });
记住一个ID只能出现一次
因为您不知道在Ajax调用之后,ID
's的哪些元素可能仍然存在于DOM中,因此您应该坚持使用classname
's。
你可以使用jQuery的.live()
来绑定已经动态加载的元素
您必须为此生成动态id。当您单击右侧栏选项时,将生成id并将id放置在body元素"id"标记中。这样您就知道哪个id是为哪个页面生成的。在"onclick"事件上调用javascript函数,并将id传递给该函数,然后将body元素调用为$("#id"+that generated_id).something;
我想这会有帮助。
- 如何在使用$(“#id”).off()后启用事件处理程序;
- Jquery单击按钮上没有类或id的事件
- 使用jQuery捕获没有ID的字段上的更改事件
- 删除外部事件时获取完整日历上的资源 ID
- 从 PHP 获取当前页面 ID 后调用 jQuery 事件
- Facebook像素:按像素ID分隔标准事件
- 将点击事件绑定到新元素&使得ID'是独一无二的
- jQuery从嵌套函数中获取触发事件的元素的id
- 可以't将事件处理程序添加到ID为的按钮中
- 如何获取特定列的值,如'id'带有表上的onClick事件's行
- 通过事件监听器在circle的文本匹配id上修改circle元素
- 根据元素的id对其调用不同的事件
- 如何使用javascript添加类似事件id的计数值
- 如何通过它引用谷歌地图标记's id并激活它's使用javascript单击事件
- 在onChange事件中未定义id
- AJAX添加多个事件插入前重置Id
- 将事件ID与特定类和toggleClass一起使用
- 如何在jQuery中绑定同一事件上的多个id
- 谷歌分析允许添加自定义轨道id事件
- 如何从UI获取类/id;事件