注释系统计时器的问题

时间:2012-12-26 19:03:20

标签: javascript jquery ajax comments

我的评论系统的评论代码存在这个奇怪的问题。我提出了一个功能,你必须在每次评论后等待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等于它将记录两次,这意味着它运行代码两次。即使它似乎只在警报中运行一次。

控制台(萤火虫):

The Console

请参阅?

代码说明。

我知道只需查看代码就可以使代码理解有点困难。我想让你更轻松。

第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行:重置计时器

我真的不知道问题是什么以及为什么它运行代码两次。我在代码中没有任何东西可以再次运行它。

感谢您提供任何帮助,我希望我能为您解决问题。

0 个答案:

没有答案