[英]Javascript while loop makes the page not load
当我把它放在我的标题中时:
<script>
function checkiffinished() {
var n = $('.result-row').length;
while (n!==3)
{
n = $('.result-row').length;
$("span").text("There are " + n + " divs.");
};
};
</script>
然后在体内放
<script>
checkiffinished();
</script>
然后页面崩溃了。
代码应该用“result-row”类计算div的数量,并重复这个,直到具有上述类的div数为3。
我怎样才能这样做而不会崩溃页面?
编辑1:我在页面中的其他jQuery导致在另一个事件上有.result-row元素,这就是为什么我需要它定期检查。
EDIT2:我正在尝试与其他一些操纵页面元素的jQuery并行运行。
JavaScript一次只能运行一段代码。 所以你的while
循环阻塞了所有JavaScript执行。 因此,任何添加元素的代码都会被暂停 - 基本上是永久的。
相反,您可能希望使用检查例如每秒的间隔: http : //jsfiddle.net/pimvdb/sbs6m/1/ 。
function checkiffinished() {
var n = $('.result-row').length;
$("span").text("There are " + n + " divs.");
if(n === 3) {
// do something
clearInterval(interval);
}
};
var interval = setInterval(checkiffinished, 1000); // 1000 ms = 1 second
你的问题是n没有递减。
pimvdb的想法很好。 这是一个包含回调的实现:
var waitUntil = function (fn, condition, interval) {
interval = interval || 100;
var shell = function () {
var timer = setInterval(
function () {
var check;
try { check = !!(condition()); } catch (e) { check = false; }
if (check) {
clearInterval(timer);
delete timer;
fn();
}
},
interval
);
};
return shell;
};
像这样使用它:
waitUntil(
function () {
// the code you want to run here...
},
function() {
// the code that tests here... (return true if test passes; false otherwise)
},
0 // amout to wait between checks
)();
你的代码是一个无限循环,如果n !== 3
因为你在while循环中所做的一切都没有改变n的值,所以while
循环只是永远地运行,等待n的值变为3.目前还不清楚你为什么放它在while
循环。 在我看来它应该只是一个if
而不是一段while
。
<script>
function checkiffinished() {
var n = $('.result-row').length;
if (n!==3)
{
$("span").text("There are " + n + " divs.");
};
}
</script>
如果你打算使用while循环,那么你必须在循环和代码中有一些实际上改变n值的东西,以确保你在while循环中达到条件以防止无限循环。
正如其他人所说,如果你想定期检查3的值,那么你需要使用setTimeout或setInterval重复执行这个函数,而不仅仅是无限循环。 但是,您不希望经常执行它,或者您可以在浏览器中降低站点和其他页面的性能。
实现这一目标的最佳方式是在您修改页面时手动调用checkiffinished()
。 这样,当没有任何改变时,不会浪费任何浏览器周期来定期检查页面值,并且在更改之后页面将立即更新(不等待下一个计时器触发以检查页面)。
嗯,尝试制作一个按钮,看它是否调用它并且不会崩溃,例如<input type="button" value="Click me!" onclick="checkiffinished()" />
<input type="button" value="Click me!" onclick="checkiffinished()" />
如果他需要它来检查后台,我假设他确实这肯定会对Josh有帮助, 在Javascript中执行后台任务
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.