最下方的发布评论按钮失效
输入内容,点击发布并没有反应。但是点击回复,可以回复一条评论。
js:
<script>
$('.btn-show-less').click(function () {
$(this).parent().addClass('hidden');
$(this).parent().prev().removeClass('hidden')
})
$('.btn-show-more').click(function () {
$(this).parent().addClass('hidden');
$(this).parent().next().removeClass('hidden')
})
function bindCommentPublishEvent(html) {
// 查询发表评论表单
var form = $('.comment-publish', html);
// 给发表评论表单下的.btn绑定事件
$('.btn', form).click(function () {
var _form = $(this).parent();
var content = $('input[name=content]', _form);
// 将表单内容序列化成一个字符串
var data = _form.serialize();
$.ajax({
url: {% if answer %}'{{ url_for("qa.comments", answer_id=answer.id) }}'{% endif %},
method: 'POST',
data: data,
complete: function (res) {
console.log(res);
if (res.status === 201) {
window.alert(res.responseJSON.message);
// 清空评论框
content.val('');
// 重新加载页面
location.reload();
} else if (res.status === 400) {
window.alert(res.responseJSON.message);
window.location.href = '{{ url_for("accounts.login") }}';
} else {
window.alert('请求失败,请稍后重试');
}
}
})
})
}
// 评论回复按钮事件
function bindReplyEvent(html) {
$('.link-reply', html).click(function () {
// jq取得data-id中的值=comment_id
var comment_id = $(this).data('id');
// 通过comment_id查询得到对应的回复表单
var form_reply = $('#id-comment-' + comment_id);
// 隐藏所有评论表单
$('.comment-publish').addClass('hidden');
// 显示最后一个评论表单
$('.comment-last').removeClass('hidden');
// 显示该评论下表单
form_reply.removeClass('hidden');
})
}
function bindCommentEvent(html) {
$('.link-love', html).click(function () {
var _this = $(this);
var url = $(this).data('url');
$.ajax({
url: url,
method: 'POST',
complete: function (res) {
// console.log('res:', res);
if (res.status === 201) {
window.alert('点赞成功');
// 当前的点赞数
var count = $('span', _this).text();
// 点赞数+1
count = parseInt(count) + 1;
// 重新设置,实现点赞数变更
$('span', _this).text(count);
} else if (res.status === 401) {
window.alert('请登录');
// 跳到登录
window.location.href = '{{ url_for("accounts.login") }}';
} else {
window.alert('服务器正忙');
}
}
})
})
}
// 评论列表的异步加载
var comment_ls = $('#id-comment-ls');
var page = 1;
function loadPageData(page) {
page = page || 1
$.ajax({
url: {% if answer %}'{{ url_for("qa.comments", answer_id=answer.id) }}'{% endif %},
method: 'GET',
data: {
page: page
},
complete: function (res) {
// console.log('res:', res);
if (res.status === 200) {
var result = res.responseJSON;
if (result.code === 0) {
var html = $(result.data);
// 评论回复按钮事件绑定
bindReplyEvent(html);
// 发布按钮事件绑定
bindCommentPublishEvent(html);
// 点赞按钮事件绑定
bindCommentEvent(html);
comment_ls.empty().append(html);
}
} else {
window.alert('服务器正忙')
}
}
})
}
$('.pager .previous').click(function () {
page = page - 1;
loadPageData(page);
})
$('.pager .next').click(function () {
page = page + 1;
loadPageData(page);
});
// 默认加载第一页数据
loadPageData(page);
</script>
view:
@qa.route('/comments/<int:answer_id>', methods=['GET', 'POST'])
def comments(answer_id):
"""坪论"""
answer = Answer.query.get(answer_id)
question = answer.question
if request.method == 'POST':
# 添加一条评论
try:
# 判断用户是否登录
if not current_user.is_authenticated:
result = {'code': 1, 'message': '请登录'}
return jsonify(result), 400
# 1.获取前端传递的参数
content = request.form.get('content', '')
reply_id = request.form.get('reply_id', None)
# 2.保存到数据库
comment_obj = Comment(content=content, user=current_user,
answer=answer, question=question, reply_id=reply_id)
db.session.add(comment_obj)
db.session.commit()
# 如果添加成功,则返回result和201状态码
result = {'code': 0, 'message': '评论成功'}
return jsonify(result), 201
except Exception as e:
print(e)
result = {'code': 1, 'message': '服务器正忙,请稍后重试'}
# jsonify将字典转成json字符串
return jsonify(result), 400
else:
# GET获取坪论列表
try:
page = int(request.args.get('page', 1))
page_data = answer.comment_list().paginate(page=page, per_page=3)
data = render_template('comments.html', page_data=page_data, answer=answer) # 获取html内容
return jsonify({'code': 0, 'data': data, 'meta': {'page': page}}), 200
except Exception as e:
print(e)
return jsonify({'code': 1, 'data': '', 'message': '服务器正忙'}), 500
html:
<!-- 发表评论 -->
<form class="form-horizontal comment-publish comment-last">
<input type="text" name="content" class="form-control" placeholder="写下你的评论...">
<button type="button" class="btn btn-default btn-grey">发布</button>
</form>
<!-- // 发表评论 -->
7
收起
正在回答
1回答
同学,你好!发布评论功能的bindCommentPublishEvent()函数只在异步加载评论时调用了,因此点击最下边的评论是没有办法发布的
解决方法:需要再调用一下发布评论功能的函数即可
祝学习愉快!
Python全栈工程师2020
- 参与学习 人
- 提交作业 5211 份
- 解答问题 2433 个
Facebook曾声称“只招全栈工程师”!全栈用人需求猛增,市面人才紧缺。 0基础进击Python全栈开发,诱人薪资在前方!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星