2014-11-21 88 views
1

每当我使用ajax从我的服务器获取新的HTML,然后jQuery修改我的页面上的当前HTML,插入的新jQuery不响应我在我的页面上的JavaScript。插入的HTML没有响应jQuery

例如,当我有这样的代码:

<td id="is_admin_14"> 
    <i class="fa fa-check-circle success"></i> 
    <a class="subtle-link demote-member" href="demote-link"> <small>Demote</small></a> 
</td> 

<script type='text/javascript'> 
$(document).ready(function($) { 

    function updateAdminStatus(url) { 
    $.post(url, function(data) { 
      console.log(data) 
      var cell = $('#is_admin_'+data.member_pk); 
      cell.html(data.html) 
     }).fail(function() { 
      // handle unexpected error here 
      alert("error"); 
     }); 
    } 

    $('.promote-member, .demote-member').click(function(event) { 
     event.preventDefault(); 
     updateAdminStatus($(this).attr('href')); 
    }); 

}); 
</script> 

和我点击.demote交换机的链路,阿贾克斯后是送的,我得到的HTML回来了,我重新填充表格单元格与返回的HTML,它是这样的:

<td id="is_admin_14"> 
    <i class="fa fa-times-circle danger"></i> 
    <a onclick="return false;" class="subtle-link promote-studio-member" href="promote-link"><small>Promote</small></a> 
</td> 

现在,当我点击推广工作室成员的链接,而无需重新加载页面,jQuery的被完全忽略,并尝试导航到HREF链接,因为它如果没有提供jQuery的话。我无法在同一页面上继续提升和降低自己的心愿。 (另外请注意,我甚至试图把onclick='return false;'放在那里,但链接仍然会触发。)

为什么会发生这种情况,并且有什么办法可以让新的html响应jQuery?

回答

3

试试这个:

$(document).on("click",".promote-member, .demote-member ,.promote-studio-member",function(){ 
    event.preventDefault(); 
    updateAdminStatus($(this).attr('href')); 
}); 

由于html被添加到DO中M动态地,你需要处理它使用jQuery中的Event Delegation

+0

不为我做。链接始终触发 – rfj001 2014-11-21 07:22:15

+0

尝试编辑的代码。 – Jinandra 2014-11-21 07:31:29

+0

这样做。感谢代码和简短的解释。 – rfj001 2014-11-21 07:32:01

1

尝试之前.promote-member, .demote-member

对于例如,如果<div id="container">总是添加静态元素添加静态HTML元素..

试试这个

$("#container").on("click",".promote-member, .demote-member",function(){ 

alert("Test"); 

}); 
+0

链接仍在ajax调用后触发 – rfj001 2014-11-21 07:24:51

+0

这个没有起作用的原因是因为我添加的容器仍然被html开关删除,因为我修改了'​​'标签之间的整个html。如果我已经为我的​​标签添加了一个类,并将其用作容器,我认为这将与@ sanki的答案一样。谢谢您的帮助。 – rfj001 2014-11-21 07:34:28