Javascript 即使页面加载了ajax,也无法单击
我有一个带有左导航的页面,它有两个链接和一个主div。每当用户单击左导航中的链接时,主div就会用服务器的内容更新。我使用pjax来实现这一点 当用户最初访问此页面时,主div有一个id为Javascript 即使页面加载了ajax,也无法单击,javascript,jquery,ajax,pjax,Javascript,Jquery,Ajax,Pjax,我有一个带有左导航的页面,它有两个链接和一个主div。每当用户单击左导航中的链接时,主div就会用服务器的内容更新。我使用pjax来实现这一点 当用户最初访问此页面时,主div有一个id为somelink的链接,当用户单击超链接时,该链接会显示一个警告框。这是通过以下代码实现的: $(document).ready(function() { ..... $('#somelink').click(function (event){ alert("here");
somelink
的链接,当用户单击超链接时,该链接会显示一个警告框。这是通过以下代码实现的:
$(document).ready(function() {
.....
$('#somelink').click(function (event){
alert("here");
});
....
});
单击导航栏上的第二个链接时,我从服务器加载内容并更新主div。当用户单击第一个链接时,我再次从服务器加载内容并更新主div。但是,这次单击somelink
时,什么也没有发生。就好像jQuery无法检测到存在id为somelink
的链接,因为它是通过ajax加载的
有没有办法克服这个问题?您需要在上使用
,并将单击处理程序委托给一个更高级别的元素,因为它是用AJAX加载的,所以不会被替换
$(main).on('click', '#somelink', function() {
alert("here");
});
原因是当您执行$('#somelink')
时,它会遍历DOM并按原样查找每个对象。因此,当您通过替换将其删除时,您需要再次添加该元素或使用。在
上,您需要在
上使用,并将单击处理程序委托给一个更高级别的元素,该元素由于加载了AJAX而没有被替换
$(main).on('click', '#somelink', function() {
alert("here");
});
原因是当您执行$('#somelink')
时,它会遍历DOM并按原样查找每个对象。因此,当您通过替换来删除它时,您需要再次添加它或使用。在上,您已经替换了元素,因此也替换了附加的事件。您需要以不同的方式添加它们,以使它们在dom更新后自动可用
尝试以下功能:
$('#somelink').on('click', function() {});
较旧的jQuery版本使用“live”函数执行此操作,而对于更旧的版本,您必须在每次dom更新后再次绑定事件 您已经替换了元素,因此附加了事件。您需要以不同的方式添加它们,以使它们在dom更新后自动可用
尝试以下功能:
$('#somelink').on('click', function() {});
较旧的jQuery版本使用“live”函数执行此操作,而对于更旧的版本,您必须在每次dom更新后再次绑定事件 我假设这是在$(document)中。ready(…是的,它的in-document ready)我假设这是在$(document)中。ready(…是的,它的in-document ready“main”是未被替换的包含DOM元素。“main”是未被替换的包含DOM元素。