使用jQuery加载文件,计算类的元素并设置间隔比率


load file using jQuery, count elements of class and set interval ratio

我要实现的是加载一个文件,计算它的类元素,然后在持续时间内显示它(2秒*没有元素)。

现在我可以使用jQuery加载该文件:

function load() {
  $(document).ready(function(){
    // load my file
    $('#content').load('phpScripts/someFile.php');
  });
  // count items
  i = $('.displayItem').length;
}

然后使用间隔显示项目

setInterval(load, i*2000);

但我不存在于这个范围内(我以为我已经宣布它是全球性的);

然后我尝试使用 ajax:

function start() {
    $(document).ready(function(){
        $.ajax({
            url: "phpScripts/infoScreenContent.php", 
            dataType: 'html', 
            success: function(data) {
              $("#content").html(data);
              i = $('.displayItem').length;
              alert(i); 
            }
        });     
    });
    //  return i;  
}
start();

现在 I = 这是我的元素计数在函数内工作,但我需要将其传递给另一个函数,即

setInterval(start, i*2000);

但是 i=0;

我试图像在 PHP 中一样返回它,但它不起作用。

我将不胜感激一些提示。

函数

$(document).ready(...)的第一个参数中传递的代码仅在文档完成加载时执行。所以在你的第一个例子中,当你调用setInterval(load, ...)时,你说每 i * 2000 毫秒:"当文档完成加载时,加载'phpScripts/someFile.php'$('#content')"。但是文档只完成一次加载,对吧?

所以这是你的第一个问题 - 加载更多内容的代码只会执行一次。

现在有了 setInterval ,一旦你开始它,它就会以相同的间隔永远持续下去。您无法通过更改 i 的值来调整它。为什么?由于间隔仅计算一次,因此当您执行行setInterval(load, i*2000); 时。表达式 i*2000 被转换为一个,然后将其传递给函数 setInterval

如果要执行一些延迟不断变化的代码,则应改用setTimeout 。我的意思是:

$(document).ready(function(){
  var elementDisplayTime = 500;
  // All functions defined inside this scope will 'see' this variable.
  function loadNext() {
    // Your code for loading new content here
  }
  function clock() {
    // Load next item
    loadNext();
    // See for how long we have to display it
    var count = $('.displayItem').length;
    // Schedule changeover after delay depending on count
    window.setTimeout(clock, count * elementDisplayTime);
  }
  // Start the clock
  clock();
});

我的相关jsfiddle。