0

我的网站是gapagap.com,当我向下滚动浏览帖子时,它会加载更多帖子,但其中有一个“投票”功能,点击时有时适用于某些帖子,有时不适用于随机帖子。这是代码片段..

索引文件

       <div id="entries-content" class="list">
            <ul id="entries-content-ul" class="col-1">
                {section name=i loop=$posts}
                {include file="posts_bit.tpl"}
                {/section}   
                      {literal}
            <script type="text/javascript">
            $(document).ready(function(){
      //calling header function to set the active tab state
      headerTabChange('hot');

                var tpage = 2;
                function lastAddedLiveFunc()
                {

                                      $('div#lastPostsLoader').html('');
                    $.get("{/literal}{$baseurl}/{literal}indexmore.php?page="+tpage, function(data){
                        if (data != "") {

                                            $(".col-1").append(data);

                        }
                        $('div#lastPostsLoader').empty();
                    });
                };

                $(window).scroll(function(){

                    var wintop = $(window).scrollTop(), docheight = $(document).height(), winheight = $(window).height();
                    var  scrolltrigger = 0.95;

                    if  ((wintop/(docheight-winheight)) > scrolltrigger) {
                     lastAddedLiveFunc();
                     tpage = tpage+1;
                     $('#backtotop').show();
                    }
                });
            });
            </script>
            {/literal}     

              </ul>
            <div id="lastPostsLoader"></div>
        </div>  
    </div>

      {include file='right.tpl'}
      {include file='vote_js.tpl'}  

这是 vote_js.tpl 的代码:

    {literal}
     <script type="text/javascript">
          $('.vote').click(function(){
        if( $(this).hasClass('loved')){
        $(this).removeClass('loved');
        likedeg(-1,$(this).attr('rel'));
        }else{
        likedeg(1,$(this).attr('rel'));
         $(this).addClass('loved');
        }
        });
        function likedeg(x,p){
        jQuery.ajax({
        type:'POST',
        url:'{/literal}{$baseurl}{literal}'+ '/likedeg.php',
        data:'art='+x+'&pid=' + p,
        success:function(e){
            $('#love_count_'+p).html(e);
            }
        });
         }
        </script>
    {/literal}

这是另一个在post.tpl中具有投票功能的代码

   <li>
    {if $smarty.session.USERID ne ""}

   <a class="vote love {insert name=get_fav_class value=var PID=$posts[i].PID}" id="post_love_{$posts[i].PID}" rel="{$posts[i].PID}" href="javascript:void(0);"><span>{$lang144}</span></a>
      {else}
     <a class="vote love " id="post_love_{$posts[i].PID}" rel="{$posts[i].PID}" href="{$baseurl}/login"><span>{$lang144}</span></a>
       {/if}
      </li>

投票功能在function.php中

       function insert_get_fav_status($var)
       {
              global $conn;
          $query="SELECT count(*) as total FROM posts_favorited WHERE                   USERID='".mysql_real_escape_string($_SESSION[USERID])."' AND PID='".intval($var[PID])."'";
          $executequery=$conn->execute($query);
$total = $executequery->fields[total];
//echo $total.'<br />';
//var_dump($var);
return intval($total);
        }

         function insert_get_fav_class($var)
             {
               global $conn;
                $query="SELECT count(*) as total FROM posts_favorited WHERE  USERID='".mysql_real_escape_string($_SESSION[USERID])."' AND PID='".intval($var[PID])."'";
               $executequery=$conn->execute($query);
               $total = $executequery->fields[total];
                  //echo $total.'<br />';
                 //var_dump($var);
                if (intval($total) == 1) return("loved");
                 else return ("");
               }

             function insert_get_unfav_status($var)
             {
              global $conn;
                $query="SELECT count(*) as total FROM posts_unfavorited WHERE  USERID='".mysql_real_escape_string($_SESSION[USERID])."' AND PID='".intval($var[PID])."'";
           $executequery=$conn->execute($query);
           $total = $executequery->fields[total];
          return intval($total);
                }

                function insert_get_fav_count($var)
                {
                 global $conn;
             $query="SELECT count(*) as total FROM posts_favorited WHERE                           PID='".intval($var[PID])."'";
          $executequery=$conn->execute($query);
          $total = $executequery->fields[total];
         return intval($total);
                }

请理解我是一名 PHP 开发人员。我对 JAVASCRIPT 和 JQUERY 的了解为零。

4

3 回答 3

2
$.get("{/literal}{$baseurl}/{literal}indexmore.php?page="+tpage).done(function(data) {
    if (data != "") {
        $(".col-1").append(data);
    }
    $('div#lastPostsLoader').empty();
});

试试这个

于 2013-04-09T09:40:31.100 回答
2

很抱歉再次回答我自己的问题……但坦率地说,我不想改变这个习惯……哈哈。

那里代替

{ $(".col-1").append(data);

我把它换成了 { $(".col-1").html(html()+data);

感谢大家的支持。

于 2013-04-15T06:09:21.177 回答
1

如果你的意思是这段代码:

<script type="text/javascript">
 (function (d, buildThese) {
   var homeScript, newScript, n = buildThese.length, i;
   for (i = 0; i < n; i = i + 1) {
     newScript = d.createElement('SCRIPT');
     newScript.type = 'text/javascript';
     newScript.async = true;
     newScript.src = buildThese[i];
     homeScript = d.getElementsByTagName('SCRIPT')[0];
     homeScript.parentNode.insertBefore(newScript, homeScript);
  }
});
</script>

您确实意识到您当前正在调用此闭包:

  • 在您的元素完全插入 DOM 之前
  • 不带任何参数(试试看:在这个特定的函数中, d 和 buildThese 都是undefined
  • 不检查

两个加粗的原因是导致您的代码搞砸的原因。如果你没有任何东西, buildThese 将是未定义的,它的长度将为 0。因此,循环将永远不会运行。即使是这样,d 也是未定义的,因此您会在 d.createElement 上遇到致命错误。

您想要的功能是 jQuery done()。这个聪明的小函数允许你设置一个回调,当插入所有新元素时触发。它是这样工作的:

$.get("myURL").done(function() { alert("I'm done!"); });

这也会对您的代码产生两个意想不到的影响:

  • 每次加载新页面时,它将允许您没有重复的 Twitter API 脚本
  • 它将允许您获取 HTML,因此将您的 JS 保存在一个地方。
于 2013-04-08T10:33:36.827 回答