1

コメント システムのコメント コードで、この奇妙な問題が発生しています。各コメントの後に 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等しいログを記録すると、ログが 2 回記録されます。つまり、コードが 2 回実行されます。アラートで一度しか実行されないように見えますが。

コンソール (firebug):

コンソール

見る?

コードの説明。

コードを見るだけでコードを理解するのが少し難しくなることはわかっています。私はあなたのことをもっと簡単にしたい。

行 1 ~ 2 : タイマーの変数。hステータスです。0 = コメントできます。1 = タイマーはまだ終わっていません。isetTimeout が格納される変数です。jは、再度コメントできるようになるまでの秒数です。
行 4 :ifタイマーが終了したことを確認するために開始します。
行 5 ~ 7 : 投稿 ID (data-post)、コメントした人の名前 ( comnam )、および実際のコメント (
combody ) を取得するためのいくつかの変数コメントにはコンテンツが含まれています。
行 15 : 別の種類のエラーの場合。
行 16 ~ 20 : コメントが 55 文字を超える場合は、3 語を超えるかどうかを確認します。そうでない場合d== false エラーをトリガーします。
行 27 : この変数には、少量の RegExp を使用してすべての情報b(タイムスタンプなどの PHP からの情報) を取得する特別な関数が含まれています。
行 28 : 「まだコメントはありません! 最初に!」を非表示にします。まだコメントがない場合。
行 29 : 名前とコメント フィールドをクリアします。
行 30 : コメントをコメント領域に追加します。
行 35 ~ 36 : コメントの数を示すテキストを更新します。
行 39 ~ 41 : タイマーを開始します。10000 ミリ秒 (10 秒)h後に 0 に戻り、コメントを続けることができます。
Lines 50-52 : タイマーのリセット

問題の内容と、コードが 2 回実行される理由がよくわかりません。もう一度実行するためのコードは何もありません。

ご協力いただきありがとうございます。私の問題を十分に明確にしていただければ幸いです。

4

0 に答える 0