【问题标题】:setTimeout() multiple JQuery instancessetTimeout() 多个 JQuery 实例
【发布时间】:2015-02-11 09:30:55
【问题描述】:

所以我在 JQuery 中有大约 10 行代码块。这些行都是独立的,当我执行它们时(我只是在控制台中输入它们,它是一个自动测试)我需要它们彼此延迟,比如有 2 秒的差异。我开始在每一行上使用 JavaScript setTimeout(),但是对于 10 行单独的代码,我假设有一种更性感的方式来做到这一点......而且 JQuery DELAY 不起作用,因为这些不是效果。有任何想法吗?这是我的代码块的总体思路..

$("#tag1").trigger("click");

$('#tag2').val("some text");

$("#tag3").trigger("keyup");

$('#tag4 select option[value="4"]').prop('selected',true);

$("#tag5").val(6);

$('#tag6').val(3).change();

$('#tag7').val(30).change();

$('#tag8').val("2017-06-29");

$('#tag9').val("2015-06-29");

$('#tag10').val("This is the test tasks' description.");

$(".id1").trigger("click");

$(".id2").val("buy oranges");

如您所见,所有标签和 ID 都是唯一的... 任何想法将不胜感激!

【问题讨论】:

  • 这听起来像是一些自动化测试,如果是这样,您是否尝试过使用 Selenium 之类的东西?它内置了这个功能。
  • 一组匿名函数是一种选择。将它们递归地传递给一个使用setTimeout的函数,每次都切掉第一个......
  • 你可以试试 setInterval(function(){alert('HI')},2000)。
  • 它实际上是自动化测试,但由于一些问题,我们无法使用 selenium,所以我必须自己构建这段代码:)
  • 如果您可以提供您的页面 HTML 示例,我可以完成下面的工作示例。

标签: javascript jquery delay settimeout


【解决方案1】:

根据我的评论:一组匿名函数将是一种选择。将它们递归地传递给使用 setTimeout 的函数,每次都切掉第一个。

例如像这样(测试只是将函数打印到控制台,因为缺少 DOM 元素):

JSFiddle: http://jsfiddle.net/bnq6tppb/1/

var operations = [
    function () {
        $("#tag1").trigger("click");
    },
    function () {
        $('#tag2').val("some text");
    },
    function () {
        $("#tag3").trigger("keyup");
    },
    function () {
        $('#tag4 select option[value="4"]').prop('selected', true);
    },
    function () {
        $("#tag5").val(6);
    },
    function () {
        $('#tag6').val(3).change();
    },
    function () {
        $('#tag7').val(30).change();
    },
    function () {
        $('#tag8').val("2017-06-29");
    },
    function () {
        $('#tag9').val("2015-06-29");
    },
    function () {
        $('#tag10').val("This is the test tasks' description.");
    },
    function () {
        $(".id1").trigger("click");
    },
    function () {
        $(".id2").val("buy oranges");
}];

并与计时器一起递归使用:

function processoperations(ops){
    // Run the first operation
    ops[0]();
    setTimeout(function(){
        if (ops.length > 1){
            // Go recursive after 2 seconds
            processoperations(ops.slice(1));
        }
    }, 2000);
}

然后像这样开始:

processoperations(operations);

这允许您每隔一段时间处理任何代码。替代方案(正如其他人提到的)是一个自动化测试工具(如 Selenium)如果这实际上是一个测试问题。更新:你提到你不允许使用 Selenium。

【讨论】:

    猜你喜欢
    • 2016-03-23
    • 2010-09-23
    • 2010-10-31
    • 2015-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多