-2

所以我有一个将数据附加到 php 页面的 ajax 函数。它就像一个评论面板,当您滚动到底部时,您可以单击一个按钮并加载更多评论。这是加载更多评论的 ajax 函数。

$("#loadmorecomments").click(function(){

 $('div#loadmorecomments').show();
  .ajax({
      url: "loadmorecomments.php?lastComment=" + $(".post:last").attr("id") + "&sname=<?php echo $link ?>",
            success: function(html){
                  if(html){
                    $("#postspace").append(html);
                    $("div#loadmorecomments").hide();

                     else{
                        ("div#loadmorecomments").replaceWith("div#done");
                    }
                });

});

这是它附加到原始 php 页面的页面。包括 javacript 在内的所有这些代码都是 loadmorecomments.php 的一部分,它被附加到原始页面。所以在所有这些完全相同的代码工作的原始页面上。不适用于附加的这些新评论。

 if($stmt = mysqli_prepare($mysqli, "SELECT post.text,post.username,post.id,post.likes,post.dislikes,post.image,users.avatar FROM post LEFT JOIN users ON post.username = users.username WHERE post.school='$sname' AND post.id < $lastcomment ORDER BY post.id DESC LIMIT 0,10")){
                               mysqli_stmt_execute($stmt);
                               mysqli_stmt_execute($stmt);
                               mysqli_stmt_bind_result($stmt,$comments,$user, $id,$likes,$dislikes,$image,$avatar);
                                   $counter = 0;
                                   while(mysqli_stmt_fetch($stmt)){


                                     /////////////////Get Image///////////////////
                                            switch($user){
                                                case "Anonymous":
                                                        $img = "design/anonymous.png";
                                                        break;
                                                case $user != "Anonymous" && !empty($avatar):
                                                        $img = $avatar;
                                                        break;
                                                case $user != "Anonymous" && empty($avatar):
                                                        $img = "logo.png";
                                                        break;
                                                }
                                            if(!empty($image) || $image != "images/"){
                                                $comimage = $image;
                                            }else{
                                                $comimage = ""; 
                                            }

                                                   echo "<div class = 'post' id = '$id'>";

                                        echo "<a href = './visitpage.php?userpage='$user'>$user<br /><img src='$img'/></a>";
                                        if(!empty($comimage)){
                                            echo "<img src='$comimage' class='comimage'></img>
                                                    <h3>$comments</h3>
                                                  ";

                                        }else{
                                            echo "<p>$comments</p>";
                                        }

                                        echo "<div style='border: 2px solid #000; height: 40px; margin-right: 20px; margin-left:90px; background: #F1F2F6'class='commentpanel' id='commentpanel_$id'>";
                                        if(in_array($id, $likedcomments)){
                                            echo "<img src='design/liked.png' class='like' /><h4 class='liketext' id='liketext_$id'>You and $likes</h4>";   

                                        }else{
                                            echo " <a href='' id='like_$id'><img src='design/like.png' class='like' /></a><h4 class='liketext' id='liketext_$id'>$likes</h4>";
                                        }
                                        if(in_array($id, $dislikedcomments)){
                                            echo "<img src='design/disliked.png' class='like' /><h4 class='liketext' id='liketext_$id'>You + $dislikes</h4>";   

                                        }else{
                                            echo " <a href='' id='dislike_$id'><img src='design/dislike.png' class='like' /></a><h4 class='liketext' id='liketext_$id'>$dislikes</h4>";
                                        }


                                        $link = urlencode($sname);
                                        echo  "
                                               <a href= '' id ='toggle_$id'><img src='design/reply.png' class='like'/><h4 class='liketext'>Send Message</h4></a>
                                              <a href= './quote.php?text=$comments&school=$link' ><img src='design/quote.png' class='like'/><h4 class='liketext'>Quote Post</h4></a>

                                              </div>

                                               <div class = 'replypost' id='replypost_$id'>
                                                <form action='' method='POST'>
                                                    <input type= 'hidden' name='user' id='user' value='$user' />
                                                    <input type= 'hidden' name='comment' id='comment' value='$comments' />
                                                    <input type='textarea' name='reply' id= 'reply' class='replycomment' />
                                                    <input type= 'submit' id='submit' name='submit' value=' Reply ' class='replybutton' />
                                                </form>
                                              </div>



                                                <br/><br/><br/>
                                             </div>";

                                        $counter++;
                                    }

                                    mysqli_stmt_close($stmt);

                           }

                                    mysqli_close($mysqli);
                           }

?>

                    <script><!---- Load More Comments !---->

                                $("#loadmorecomments").click(function(){

                                    $('div#loadmorecomments').show();
                                                        $.ajax({
                                                               url: "loadmorecomments.php?lastComment=" + $(".post:last").attr("id") + "&sname=<?php echo $link ?>",
                                                               success: function(html){
                                                                   if(html){
                                                                       $("#postspace").append(html);
                                                                       $("div#loadmorecomments").hide();

                                                                   }else{
                                                                        $("div#loadmorecomments").replaceWith("div#done");
                                                                   }
                                                               }
                                                     });

                        });


                            $("a[id ^= 'toggle']").click(function(event){

                                            event.preventDefault();
                                            $("div [id='replypost_"+$(this).attr('id').replace('toggle_','')+"']").toggle();

                                });

                            var likecounter = 0;
                            var dislikecounter = 0;

                            $("a[id ^= 'like_']").click(function(event){
                                    event.preventDefault();

                                    var value = $(this).attr("id").replace('like_','');
                                            $.ajax({
                                                               url: "./like.php?id="+value+"&sname=<?php echo $link ?>",
                                                               success: function(html){
                                                                   if(html && likecounter == 0 && dislikecounter == 0 ){

                                                                       $("#commentpanel_"+value).append("<br/><br/><br /><br /><h4>You Like This Post</h4>");
                                                                       likecounter = 1;

                                                                   }else{
                                                                        $("div#loadmorecomments").replaceWith("div#done");
                                                                   }
                                                               }
                                                     });


                                });

                            $("a[id ^= 'dislike_']").click(function(event){
                                    event.preventDefault();

                                    var value = $(this).attr("id").replace('dislike_','');
                                            $.ajax({
                                                               url: "./dislike.php?id="+value+"&sname=<?php echo $link ?>",
                                                               success: function(html){
                                                                   if(html && likecounter == 0 && dislikecounter == 0 ){

                                                                       $("#commentpanel_"+value).append("<br/><br/><br /><h4>You Hate This Post</h4>");
                                                                       dislikecounter = 1;


                                                                   }else{
                                                                        $("div#loadmorecomments").replaceWith("div#done");
                                                                   }
                                                               }
                                                     });


                                });




          </script>

我想知道为什么当我单击应该调用这些 javascript 函数的锚标记时,它只是刷新页面而没有调用任何 javascript 函数。

注意:原始页面的发布评论和调用javascript函数的格式完全相同,并且可以完美运行。唯一不起作用的情况是从调用的 loadmorecomments.php 文件加载注释时。

我知道这是一个棘手的问题,如果我可以进一步澄清,请告诉我谢谢。

4

5 回答 5

1

从您发布的代码片段中很难分辨,但我认为您是说第二个和第三个片段是通过 ajax 加载的。如果是这样,那是您的问题,因为通过 ajax 加载时未执行 js(第三个片段)。最简单的解决方案是将此 javascript 包含在您的主 js 文件中并对其进行修改,以便它可以处理尚未加载的 dom 元素。您似乎正在使用 JQuery,因此http://api.jquery.com/on/拥有使用 JQuery 1.7+ 所需的所有详细信息。如果没有,请查看http://api.jquery.com/live/,它更容易(但对于 iOS Safari 来说很棘手)。

于 2013-05-15T21:40:18.063 回答
1

编辑:

我已经意识到该live()功能已被弃用并且即将在 1.9 版中删除,所以为了大家的利益,我已经编辑了我的答案。您应该改用该on()功能。谢谢!


我会尽力解释这一点。

正如我的评论所引用的..

“你不应该只使用live()而不是click()吗?请参阅API 描述..”为现在和将来匹配当前选择器的所有元素附加一个事件处理程序。"

现在,问题是..有什么区别?

usingclick()会将事件处理程序添加到您在 jQuery 中指定的选择器的所有目标中,它解释了live()前面 API 描述中的“现在”。

ex:$("a[id ^= 'toggle']")仅适用于调用该函数时的所有 DOM 对象。

所以插入到 DOM 中的所有新对象都没有那个“事件处理程序”

但与 不同live()的是,与原始选择器匹配的所有对象仍将受您添加的事件的约束,解释了描述的“现在和未来”子句。

换句话说,它就像调用相同的绑定函数,(在这种情况下click())每次将一个新对象插入到与原始选择器匹配的 DOM 中。

所以代替原来的

$("a[id^='toggle']").click(function(event){

你会使用

//$("a[id^='toggle']).live('click',function(event){ 
//EDIT: this is deprecated. use on() instead, see below:

$(document.body).on('click', 'a[id^="toggle"]', function() {
于 2013-05-15T22:23:19.953 回答
1

最近的帖子被删除。

新答案。我知道它不会那么干净,但尝试在其中添加<!---- Load More Comments !---->脚本,loadmorecomments.php以便在添加新评论时加载它。

于 2013-05-15T21:12:03.523 回答
0

您可以尝试将 a 放入具有切换 ID 的锚标记#的属性中。href=""例如<a href="#" id="toggle_$id"></a>

于 2013-05-15T21:11:58.100 回答
0

答案来自@reikyoushin 我应该使用 live() 函数来处理点击。非常感谢所有试图帮助回答这个问题的人!!

于 2013-05-15T22:13:40.270 回答