繁体   English   中英

Javascript while循环使页面无法加载

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM