老师,调试的时候发现问题和回答的点赞与踩部分的问题

来源:8-14 给问题或回答点赞踩

weixin_慕勒8503844

2019-07-18

    第一个问题是,在点赞与踩的过程中,点赞与踩的箭头高亮颜色变化存在问题,发现每次点击后questionUpVote和questionDownVote的class中已有voted并不会改变,如果在ajax成功后,如果用location.reload(true)刷新页面可以嘛?如果不可以,怎样解决这个问题呢?

    第二个问题是,问题详情页中同一个用户的两个回答,采纳只能选择用户最新一次的回答,而时间较前的回答不能采纳,前端不会发起请求,改怎样解决呢?

用的代码版本是:v1.6.2
谢谢老师!!

写回答

1回答

Jack

2019-07-22

不好意思,这么久才回复。这两个问题的确是项目的bug,我看部署好的demo也有这问题 o(╥﹏╥)o

问题一:可以用location.reload(true)刷新页面,但可以直接通过js改变class

answer_sample.html

<span id="answerVotes" class="votes">{{ answer.total_votes }}</span>

改成

<span class="votes">{{ answer.total_votes }}</span>

qa.js中$(".answer-vote")函数改成

$(".answer-vote").click(function () {
   // 给回答投票
   const answer_id = $(this).closest(".answer").attr("answer-id");
   const answer = $('div[answer-id=' + answer_id + '] .votes');
   if ($(this).hasClass("up-vote")) {
       vote = "U";
   } else {
       vote = "D";
   }
   $.ajax({
       url: '/qa/answer/vote/',
       data: {
           'answer': answer_id,
           'value': vote
       },
       type: 'post',
       cache: false,
       success: function (data) {
           if (vote === "U") {
               $('div[answer-id=' + answer_id + '] .down-vote').removeClass('voted');
               $('div[answer-id=' + answer_id + '] .up-vote').addClass('voted');
           } else {
               $('div[answer-id=' + answer_id + '] .up-vote').removeClass('voted');
               $('div[answer-id=' + answer_id + '] .down-vote').addClass('voted');
           }
           answer.text(data.votes);
       }
   });
});

问题二:bug比你说的更严重,不是只能采纳同一个用户的最新回答,是只能采纳所有未被接受回答中的最后一个。是qa.js的问题,$("#acceptAnswer").click(function ()...这个函数里,当有多个回答的时候,每个回答都有id="acceptAnswer",$("#acceptAnswer")只会选中第一个未被接受的回答,改一下jQuery选择器就好了

answer_sample.html

<i id="acceptAnswer" class="fa fa-check accept" aria-hidden="true" title="点击采纳回答"></i>

改成

<i class="fa fa-check accept acceptAnswer" aria-hidden="true" title="点击采纳回答"></i>

qa.js改成

$(".acceptAnswer").click(function () {
   // 接受回答
   const answer_id = $(this).closest(".answer").attr("answer-id");
   const answer = $('div[answer-id=' + answer_id + '] .acceptAnswer');
   $.ajax({
       url: '/qa/accept-answer/',
       data: {
           'answer': answer_id
       },
       type: 'post',
       cache: false,
       success: function (data) {
           $(".accepted").removeClass("accepted");
           $(".accepted").prop("title", "点击接受回答");
           answer.addClass("accepted");
           answer.prop("title", "该回答已被采纳");
       }
   });
});

谢谢你的问题,我已更正push到master了

0
0

Django高级实战 开发企业级问答网站

融合Django高级用法/算法/设计模式/TestCase测试/云计算打造项目

900 学习 · 756 问题

查看课程