2017-05-24 53 views
2

由于某种原因,我的变量保持重置为2,尽管我希望在函数调用时增加变量。这真的很烦人,我重构了代码几次无济于事!它应该是简单...变量不在jQuery/JS中递增?

这里是我的代码:

(function($) { 
     $(document).ready(function() { 
      var count = 2; 
      var total = <?php echo $loop->max_num_pages; ?>; 
      if (count <= total) { 
       $(window).scroll(function() { 
        if ($(window).scrollTop() == $(document).height() - $(window).height()) { 
         $.ajax({ 
          url: "<?php bloginfo('wpurl') ?>/wp-admin/admin-ajax.php", 
          type:'POST', 
          data: "action=infinite_scroll&page_no=" + count + '&loop_file=forums', 
          success: function(html){ 
           $("#content").append(html); 
          } 
         }); 
         count++; 
        } 
       }); 
      } else { 
       return; 
      } 
     }); 
    })(jQuery); 

编辑:感谢您的答复迄今!下面更新代码:

<script type="text/javascript"> 
    pageCount = 2; 
    total = <?php echo $loop->max_num_pages; ?>; 
    jQuery(window).scroll(function() { 
     if (jQuery(window).scrollTop() == jQuery(document).height() - jQuery(window).height()){ 
      console.log('Old value: ' + pageCount); 
      if (pageCount > total){ 
       return false; 
      } else { 
       loadArticle(pageCount); 
      } 
      pageCount++; 
      console.log('New value: ' + pageCount); 
     } 
    }); 

    function loadArticle(pageNumber) { 
     jQuery.ajax({ 
      url: "<?php bloginfo('wpurl') ?>/wp-admin/admin-ajax.php", 
      type:'POST', 
      data: "action=infinite_scroll&page_no=" + pageNumber + '&loop_file=forums', 
      success: function(html){ 
       jQuery("#content").append(html); 
      } 
     }); 
    return false; 
    } 
</script> 

新的值总是3老值始终是2(在控制台输出),所以它仍然被重置...

解决:在AJAX方法的HTML回调造成了这个问题。将增量移到那里工作!新代码:

(function($) { 
     pageCount = 2; 
     total = <?php echo $loop->max_num_pages; ?>; 
     $(window).scroll(function() { 
      if ($(window).scrollTop() == $(document).height() - $(window).height()){ 
       if (pageCount > total){ 
        return false; 
       } else { 
        $.ajax({ 
         url: "<?php bloginfo('wpurl') ?>/wp-admin/admin-ajax.php", 
         type:'POST', 
         data: "action=infinite_scroll&page_no=" + pageCount + '&loop_file=forums', 
         success: function(html){ 
          $("#content").append(html); 
          pageCount++; 
         } 
        }); 
       } 
      } 
     }); 
    })(jQuery); 
+0

我认为你的'html'返回的响应包含相同的脚本,使你的变量再次2 –

回答

2

在函数外定义计数变量。

例如

var count = 2; 
(function($) { 
     $(document).ready(function() { 
      var total = <?php echo $loop->max_num_pages; ?>; 
      if (count <= total) { 
       $(window).scroll(function() { 
        if ($(window).scrollTop() == $(document).height() - $(window).height()) { 
         $.ajax({ 
          url: "<?php bloginfo('wpurl') ?>/wp-admin/admin-ajax.php", 
          type:'POST', 
          data: "action=infinite_scroll&page_no=" + count + '&loop_file=forums', 
          success: function(html){ 
           $("#content").append(html); 
          } 
         }); 
         count++; 
        } 
       }); 
      } else { 
       return; 
      } 
     }); 
    })(jQuery); 
+1

你不应该使用全局变量 – broodjetom

+0

感谢您的回复。我更新了我的问题,仍然有问题! – tdwells90

3

两件事第一:

变种,能够缩短例如:

var var1 = 'string', 
    var2 = 'int'; 

不要JS里面混PHP - 这是凌乱。创建一个隐藏的跨度并为其分配数据标签,并像这样调用

其次,这是因为无论何时调用该函数都会重置该值。放置在外面,或传递一个名为count的参数,以便使其更通用并在整个项目中使用它。

+0

嗨,感谢您的回复,非常感谢!用新代码更新我的问题:) 我现在有点快和肮脏的一分钟,但从PHP中取出PHP是我的下一步,一旦它的工作。 – tdwells90

+0

@ tdwells90没有问题的朋友:) – ThisGuyHasTwoThumbs

+0

解决并更新:) – tdwells90

0

您的问题在于,变量count是您的方法的本地。这意味着它只在该方法调用中存在。下一次再次调用函数时,它将创建一个值为2的不同的count,因为这是您在声明中指定的值。在方法外移动变量声明,一切都应该没问题。

+0

嗨,感谢您的回复。我更新了新代码,但我仍然遇到问题。该变量现在位于该方法之外,但变量仍未正确更新。 – tdwells90