Подтвердить что ты не робот

Как отложить выполнение в следующем javascript

Я хочу отложить выполнение в следующих кодах:

$("#myName").val("Tom");
///delay by 3s
$("#YourName").val("Jerry");
//delay by 3s

$("#hisName").val("Kids");
4b9b3361

Ответ 1

Вы можете использовать setTimeout для этого:

setTimeout(function() {
    // Your code here
}, delayInMilliseconds);

например:.

$("#myName").val("Tom");

/// wait 3 seconds
setTimeout(function() {
    $("#YourName").val("Jerry");

    /// wait 3 seconds
    setTimeout(function() {
        $("#hisName").val("Kids");
    }, 3000);
}, 3000);

setTimeout назначает функцию, которая будет выполняться (один раз) после интервала. Код, вызывающий его, продолжается, и в какой-то момент в будущем (примерно через указанное вами время, хотя и не точно) функция вызывается браузером.

Итак, предположим, что у вас была функция под названием output, которая добавила текст на страницу. Результат этого:

foo();
function foo() {
    var counter = 0;

    output("A: " + counter);
    ++counter;
    setTimeout(function() {
        output("B: " + counter);
        ++counter;
        setTimeout(function() {
            output("C: " + counter);
            ++counter;
        }, 1000);
    }, 1000);
    output("D: " + counter);
    ++counter;
}

... (через пару секунд):

A: 0
D: 1
B: 2
C: 3

Обратите внимание на вторую строку этого. Остальная часть кода foo выполняется перед любой из запланированных функций, поэтому мы видим строку D до строки B.

setTimeout возвращает дескриптор (который является ненулевым числом), который вы могли бы использовать для отмены обратного вызова до его возникновения:

var handle = setTimeout(myFunction, 5000);
// Do this before it runs, and it'll never run
clearTimeout(handle);

Также есть связанный setInterval/clearInterval, который делает то же самое, но несколько раз в указанном вами интервале (пока вы не остановите его).

Ответ 2

Вы можете использовать функцию setTimeout. Я думаю, что синтаксис

window.setTimeout('$("#YourName").val("Jerry")',3000);

Ответ 3

Если задержка всегда одинаковая (3s в вашем примере), вы можете избежать вложенного кода и использовать setInterval вместо setTimeout

var i
  , ids = ["myName", "YourName", "hisName"]
  , names = ["Tom", "Jerry", "Kids"];

i = setInterval(function () {
    if (ids.length > 0) {
        $("#" + ids.shift()).val(names.shift());
    } else {
        clearInterval(i);
    }
}, 3000);

Ответ 4

Вы не можете "задерживать" JavaScript без блокировки браузера; то есть пользователь не может перемещать свою мышь или ничего нажимать (нежелательно в течение 3 + секунд!).

Вместо этого вы должны посмотреть на установку тайм-аута, который в будущем будет выполнять назначенный код...

$("#myName").val("Tom");
setTimeout(function () {
    $("#YourName").val("Jerry");

    setTimeout(function () {
        $("#hisName").val("Kids");
    }, 3000);
}, 3000);

Вы можете проверить документацию для setTimeout здесь: https://developer.mozilla.org/en/window.setTimeout. Основой этого является то, что вы передаете либо ссылку на функцию, либо строку (чего следует избегать) в качестве первого параметра, а второй параметр, определяющий, сколько миллисекунд следует отложить для кода.