我要实现的是加载一个文件,计算它的类元素,然后在持续时间内显示它(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。