最近打算摸索一下主题的写法,过程中遇到的一些坑,记录一下,不知道有没有遇到相同问题的小伙伴
先贴代码:
zbp.plugin.on('comment.reply.start', 'yk_cool_summer', function (i) {
$('#inpRevID').val(i);
var frm = $('#divCommentPost'), cancel = $('#cancel-reply');
var div = document.createElement('div');
div.id = 'temp-frm';
div.style.display = 'none';
frm.before(div);
$('#AjaxComment' + i).before(frm);
cancel.show();
cancel.click(function () {
$('#inpRevID').val(0);
var temp = $('#temp-frm'), frm = $('#divCommentPost');
if (!temp.length || !frm.length) return;
temp.before(frm);
temp.remove();
$(this).hide();
return false;
});
try {
$('#txaArticle').focus();
} catch (e) {}
return false;
});
写主题的小伙伴对这段代码应该不陌生,这段代码是回复评论时候触发的,应该算是zblog回复评论经典写法,我看很多主题基本都是这种写法,有差异那也是大同小异。
问题:
cancel.click方法体内temp.before(frm)实际测试过程中,如果连续回复评论后取消回复,评论框只会还原到上一次,而不是最初始的位置。并且我发现其实有部分主题都存在这种问题。也没去研究其他大佬是如何规避这个问题的,先贴一下我的优化方案,欢迎站点其他大佬们指点更优雅的解决办法。
优化代码:
zbp.plugin.on('comment.reply.start', 'yk_cool_summer', function (i) {
$('#inpRevID').val(i);
var frm = $('#divCommentPost'), cancel = $('#cancel-reply');
var div = document.createElement('div');
div.id = 'temp-frm';
div.style.display = 'none';
frm.before(div);
$('#AjaxComment' + i).before(frm);
cancel.show();
cancel.click(function () {
$('#inpRevID').val(0);
var temp = $('#temp-frm'), frm = $('#divCommentPost');
if (!temp.length || !frm.length) return;
$(".yk_article").after(frm);
temp.remove();
$(this).hide();
return false;
});
try {
$('#txaArticle').focus();
} catch (e) {}
return false;
});
其实就改了一行代码,把temp.before(frm);换成了$(".yk_article").after(frm); yk_article是初始评论框上一个兄弟标签class,不知道这种写法有没有隐藏的坑