我的评论系统的评论代码存在这个奇怪的问题。我提出了一个功能,你必须在每次评论后等待10秒钟。它以前工作得很好,但现在我改变了代码,我有一个问题。当你发表评论时,即使它是你发布的第一个评论,也会出现错误,因为计时器甚至不应该是活动的。
完整的代码是:
1 var h = 0,
2 i, j = 10;
3 $(".comment").click(function () {
4 if (h == 0) {
5 var a = $(this).attr("data-post"),
6 b = $(".comname-" + a).text(),
7 c = $(".combody-" + a).val();
8 if ($.trim(b) == "") {
9 alertBox("Missing Field", "Please Enter a Name to Comment.", "Close")
10 }
11 else if ($.trim(c) == "") {
12 alertBox("Missing Field", "Please Enter a Comment.", "Close")
13 }
14 else {
15 var d = true;
16 if (c.length > 54) {
17 if ($$.string(c).count(" ") < 3) {
18 d = false
19 }
20 }
21 if (d == true) {
22 $.post("post.php?action=comment", {
23 id: a,
24 name: b,
25 com: c
26 }, function (b) {
27 var c = $$.string(b).found(/\[[0-9]\] => (.+)/g, 2);
28 $(".no-" + a).hide();
29 $(".comname-" + a + ", .combody-" + a).val("");
30 $(".comholder-" + a).append('<div class="commenthold comment-' + c[3] + '"><span class="content-' + c[3] + '">' + c[1] + '</span> <br> <span class="name cname-' + c[3] + '">' + c[0] + '</span><span class="comment-timeago" style="float:right" title="' + c[2] + '"></span><img src="/img/edit.png" class="edit tip" title="Edit Comment" style="cursor:pointer" data-id="' + a + '" onclick="openEdit(' + c[3] + ')"/><img src="/img/edited.png" title="This comment has be edited 0 times" class="times-' + c[3] + '" style="display:none;cursor:pointer;width: 13px; height: 13px; position: absolute; top: 0px; right: -17px;"><div style="color:red;position:absolute;top:2px;right:4px;cursor:pointer" title="Delete Comment" data-id="' + a + '" onclick="delO(' + a + ',' + c[3] + ')" class="tip"><img class="width" src="/img/remove.png" /></div></div><br>');
31 $(".tip").tipsy({
32 gravity: "sw"
33 });
34 $(".comment-timeago").timeago();
35 var d = parseInt($(".show-" + a).text().replace(/[^0-9]/g, "")) + 1;
36 $(".show-" + a).text(d + " Comment" + (d !== 1 ? "s" : ""))
37 });
38 h = 1;
39 i = setTimeout(function () {
40 h = 0
41 }, j * 1e3);
42 }
43 else {
44 alertBox("Error", "You must have at least 4 words considering the length of this comment.", "Close")
45 }
46 }
47 }
48 else {
49 clearTimeout(i);
50 i = setTimeout(function () {
51 h = 0
52 }, j * 1e3);
53 alertBox("Timer Warning", "Must wait " + j + " seconds before commenting again. Timer Reset.", "Close")
54 }
55 });
奇怪的是,如果我在if (h == 0)
之前添加警报,那么它可以正常工作,并且不会显示计时器的错误框。
但是如果我把console.log记录为h
等于它将记录两次,这意味着它运行代码两次。即使它似乎只在警报中运行一次。
控制台(萤火虫):
请参阅?
我知道只需查看代码就可以使代码理解有点困难。我想让你更轻松。
第1-2行:计时器的变量。 h
是状态,0 =您可以发表评论; 1 =计时器仍未结束。 i
是setTimeout将存储的变量。j
是您可以再次发表评论之前的秒数。
第4行:启动if
以确保计时器结束
第5-7行:获取Post Id(数据发布)的更多变量,评论(comnam)的人的名称,以及获取实际评论(combody)
8-13行:确保名称和评论中都包含内容
第15行:对于其他类型的错误
第16-20行:如果评论超过55个字符,请检查其是否超过3个字。如果不是d
== false,则会触发错误
第27行:此变量包含一个特殊函数,该函数使用一点RegExp从b
获取所有信息(来自PHP的信息,如时间戳)。
第28行:隐藏“暂无评论!成为第一个!”如果没有评论。
第29行:清除名称和评论字段
第30行:将评论附加到评论区域
第35-36行:更新文本,告诉您有多少条评论
第39-41行:启动计时器,在10000毫秒(10秒)后将h
转回0,以便继续发表评论。
第50-52行:重置计时器
我真的不知道问题是什么以及为什么它运行代码两次。我在代码中没有任何东西可以再次运行它。
感谢您提供任何帮助,我希望我能为您解决问题。