Javascript 即使页面加载了ajax,也无法单击

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");

我有一个带有左导航的页面,它有两个链接和一个主div。每当用户单击左导航中的链接时,主div就会用服务器的内容更新。我使用pjax来实现这一点

当用户最初访问此页面时,主div有一个id为
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元素。