检查页面是否正在加载JavaScript?

检查页面是否正在加载JavaScript?,javascript,jquery,html,Javascript,Jquery,Html,因此,我有一个setInterval,它选择一个输入,然后通过单击()提交表单。现在我的问题是我的函数点击按钮的次数太多了。我尝试添加一个布尔值来检查它是否被单击。没有骰子,页面不会加载。出于某种奇怪的原因,提交按钮有时不起作用。我需要的间隔在100-1000只是为了以防万一的页面超时或滞后。如何检查以确保在页面尝试加载时不会再次单击?如果间隔超过1000,代码可以正常工作,但我需要速度 var pickSize = setInterval(function(){

因此,我有一个setInterval,它选择一个输入,然后通过单击()提交表单。现在我的问题是我的函数点击按钮的次数太多了。我尝试添加一个布尔值来检查它是否被单击。没有骰子,页面不会加载。出于某种奇怪的原因,提交按钮有时不起作用。我需要的间隔在100-1000只是为了以防万一的页面超时或滞后。如何检查以确保在页面尝试加载时不会再次单击?如果间隔超过1000,代码可以正常工作,但我需要速度

        var pickSize = setInterval(function(){
            if(window.location.href.indexOf("/website/") == -1 && window.location.href.indexOf("/page.php") == -1) {
                if($('input[value="236"]').attr("checked", true)) {
                    $('.Add').click();
                }
            }
        }, 1000);
试试这个:

var body = document.getElementsByTagName('BODY')[0];
// CONDITION DOES NOT WORK
if ((body && body.readyState == 'loading')) {
DoStuffFunction();
} else {
// CODE BELOW WORKS
if (window.addEventListener) {
    window.addEventListener('load', DoStuffFunction, false);
} else {
    window.attachEvent('onload',DoStuffFunction);
}
}

您可以使用
onbeforeunload
事件检查页面是否已开始导航到其他页面:

var interval = setInterval(function(){
    if(window.location.href.indexOf("/website/") == -1 && window.location.href.indexOf("/page.php") == -1) {
        if($('input[value="236"]').attr("checked", true)) {
            $('.Add').click();
        }
    }
}, 1000);

window.addEventListener('beforeunload', function() {
  clearInterval(interval);
  console.log('Started to navigate away...');
});

但是,看起来您需要修复原因,而不是结果。将你的HTML和JS发布到另一个问题中,比如“为什么我的表单只是偶尔提交?”让我们试着理解原因。这确实是因为某些原因而发生的:)

已经很多年了,代码已经消失很久了,但是在重新审视这个问题之后,我觉得我可以为那些对元素不存在有问题的人提供一些见解

这个问题的解决方案是等待元素通过ajax调用动态加载完成。加载元素后,您现在可以单击该元素


这实际上是我个人在创建自动化测试时面临的问题,您将在许多selenium代码中看到。不过,我上面的代码不是selenium,当时只是一个常规脚本。考虑使用一个像硒或傀儡之类的库来进行任何未来的自动化测试。

将代码封装在<代码> $(文档)中。准备好(函数){ /*代码在这里*/)在这种情况下,
setInterval
有什么意义?setInterval用于在项目不可用或超时的情况下重新尝试。我过去没有这个问题,setInterval会在页面开始重定向时立即停止。我的setInterval现在像发垃圾邮件一样疯狂,即使我抛出“window.location=”;“您希望使用
setTimeout
,但它可能不可预测,您可以添加
clearInterval(pickSize)
单击后将部分代码添加到您的代码中。更好的方法是使用
窗口。实际使用Javascrypt
异步加载事件。等待
可以执行类似Selenium的代码。我为我们在工作中使用的Web应用程序构建了一个完全SPA的自动化程序(即无url更改)因此,我必须完全依赖于存在的元素。我必须构建一个用vanilla JS编写的自定义插件,模拟Selenium真正有用的主要功能,如预期条件。我可以将此代码包含到我的脚本中,并且我可以像使用Selenium一样自动化。也许它对某些人有用: