我正在尝试为我的博客站点创建评论系统。用户可以在此处发布问题,其他人可以对其进行回复。用户也可以对每个回复进行评论,例如堆栈溢出。问题是在第一个评论之后,第二个评论被提交了两次,第三次评论提交三次,等等。我该如何解决这个问题?谢谢 :)

hrer var comment,textarea和cmntholder都是元素的集合

var comment=$('.cmnt');
var textarea=$('.answerComment');
var cmntholder=$('.cmntholder')
for(i=0;i<comment.length;i++){
    (function(i){
        $(comment[i]).click(function(e){
            e.preventDefault();
            $(comment[i]).hide();
            $(textarea[i]).show();
            $(textarea[i]).keypress(function(e){
                if(e.which=='13'){
                    $.ajax('../includes/verifycomment.php',{
                        data   :{
                            'comment_body'     :$(this).val(),
                            'userpost_post_id' : <?php echo $postid;?>,
                            'users_user_id'    : <?php echo $userdata->user_id; ?>,
                            'answers_answer_id':$(this).data('id')
                        },
                        datatype:'json',
                        method  :'POST',
                        success :function(response){
                              $(textarea[i]).html('');
                              $(textarea[i]).hide();
                              var obj=$.parseJSON(response);
                             alert('bal');
                              var str="<div class='stylecomment' >"+obj[0]['comment_body']+" --- <span style='color:#d3d3d3;font-size:13px;'>   commented by </span><a href='../includes/profile.php?user=<?php echo escape($userdata->username);?>'><?php echo escape($userdata->username);?></a> </div></div>";
                              $(cmntholder[i]).append(str);
                              $(comment[i]).show();
                        }

                    });
                }
            });
            $(this).hide();
        });
    })(i);
}


这是问题:

javascript - jQuery Ajax发送第二次提交两次,第三次发送三次-LMLPHP

最佳答案

这是因为每次单击事件触发时,您都会将keypress函数重新绑定到DOM元素。这不会每次都替换当前的keypress事件侦听器,而只是添加一个新的。因此,第一次单击时,它将执行一次,第二次,将执行两次,等等。每次将click事件触发时,都可以删除事件侦听器,即将新的按键侦听器绑定到textarea [i]之前,每次只会触发一个事件。
http://api.jquery.com/unbind/

$(textarea[i]).unbind("keypress");
$(textarea[i]).keypress(function (e) {...});


每当您在事件侦听器中定义事件侦听器(仅是FYI)时,就会发生这种情况。

09-17 13:20