2017-09-15 77 views
1

我正在尝试做一个简单的投票按钮,但它每次发布的每个帖子只能重新加载一次。AJAX第二个电话不起作用

它应该是如何工作的: 点击 “+” - >更新查询(在Django) - >加载一个div(变化 “+” 到 “ - ”) - >允许按 “ - ” 撤消给予好评

它显示第一次投票后显示“ - ”按钮,但当我点击它时,没有任何反应。它只有当我点击“F5”并重新加载页面时才有效。

控制台中没有错误。

 ... some django scripts to check which button should be displayed ... 

     <span class="upvote"><span postId="{{post.id}}" class="vote" href="upvote/{{post.id}}">+</span></span> 

     <span class="downvote"><span postId="{{post.id}}" class="vote" href="downvote/{{post.id}}">-</span></span> 
     ... 

     $(document).ready(function(){ 
      $(".vote").click(function(e){ 
      href = $(this).attr("href"); 
      postId = $(this).attr("postId"); 
      $.ajax({ 
       url: href, 
       success: function() { 
        $("#post-"+postId+" >header").load(location.href+ " #post-"+postId+">header>*"); 
       }, 
      }); 
     }); 

的“帖子ID”和“HREF”属性正确填写

回答

2

这不是很明显的问题是根据您发布的代码是什么,但我猜测,该<span>-</span>被添加到DOM 您点击<span>+</span>。如果是这种情况,那么你的问题是你只有绑定$('.vote').on('click'....vote DOM中的元素时,该代码首次执行页面加载。您可以通过使用事件委托给事件处理静态父元素绑定解决这个问题并采取行动从孩子降临到你的选择相匹配的任何事件:

$(document).on('click', ".vote", function(e){ 
    href = $(this).attr("href"); 
    postId = $(this).attr("postId"); 
    $.ajax({ 
     url: href, 
     success: function() { 
      $("#post-"+postId+" >header").load(location.href+ " #post-"+postId+">header>*"); 
     }, 
    }); 
})