SetInterval循环直到找到元素

时间:2019-05-13 21:29:43

标签: javascript jquery setinterval do-while

嘿,我使用此javascript未能获得所需的结果。当我在IE中执行它时,这就是控制台中的内容:

  

开始

     

在第2步

     

第1步存在!

     

第1步存在!

     

第1步存在!

     

第1步存在!

     

第1步存在!

     

第1步存在!

     

第1步存在!

     

等...

这是我的JavaScript代码:

javascript: (function () {
    var t = "34637",
    a = "fhh",
    l = "Rule",
    i = "baywatch",
    o = "NMN",
    n = "C",
    s = "US",
    d = "US",
    q = "M",
    m = "IA",
    p = "05/22/1994",
    y = "DL",
    z = "Ztghy663";
    console.log("Starting");
    var c = setInterval(function () {
            if ($('[title="Submit a Search"]').length) {
                console.log("Step 1 Exists!");
                clearInterval(c);
                $('[title="Submit a Search"]').click();
            }
        }, 100);
    console.log("at Step 2");
    c = setInterval(function () {
        console.log("Step 2!");
        if ($('[data-test-id="201707241746357527497-Label"]').length) {
            console.log("Step 2 Exists!");
            clearInterval(c);

            t = prompt("Please enter the number:", "");
            $('[data-test-id="2017072417423205261024660"]').val = t; /*Sets the Number textbox*/
            console.log("at Step 3");
        }
    }, 100);
})();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h1 title="Submit a Search"> </h1>

我对此不太确定。我的想法是它将开始,直到找到它,才离开该循环。它单击标题“提交搜索”,所以我知道这是可行的,但是正如您在上方看到的那样,即使找到了标题,它仍会继续循环播放。

我确定我只是在寻找一些简单的东西,但是现在我找不到任何错误的代码...

1 个答案:

答案 0 :(得分:0)

问题在于,当您在此行中存储间隔ID时,这是为第1步定义的

var c = setInterval(function () {

您可以用此行覆盖它,并在第2步中对其进行定义

c = setInterval(function () {

因此,它尝试清除step1方法内部的step 2函数的间隔,因此不会清除step1 setInterval。

您只需要将两个间隔都存储在单独的变量中,以便可以清除这两个间隔。

更新的工作代码。

javascript: (function () {
    var t = "34637",
    a = "fhh",
    l = "Rule",
    i = "baywatch",
    o = "NMN",
    n = "C",
    s = "US",
    d = "US",
    q = "M",
    m = "IA",
    p = "05/22/1994",
    y = "DL",
    z = "Ztghy663";
    console.log("Starting");
    var c1 = setInterval(function () {
            if ($('[title="Submit a Search"]').length) {
                console.log("Step 1 Exists!");
                clearInterval(c1);
                $('[title="Submit a Search"]').click();
            }
        }, 100);
    console.log("at Step 2");
    var c2 = setInterval(function () {
        console.log("Step 2!");
        if ($('[data-test-id="201707241746357527497-Label"]').length) {
            console.log("Step 2 Exists!");
            clearInterval(c2);

            t = prompt("Please enter the number:", "");
            $('[data-test-id="2017072417423205261024660"]').val = t; /*Sets the Number textbox*/
            console.log("at Step 3");
        }
    }, 100);
})();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h1 title="Submit a Search"> </h1>
<h2 data-test-id="201707241746357527497-Label"> </h2>