2013-09-24 3 views
0

Как установить html элемента, подождать 2 секунды, а затем установить html на что-то еще?jQuery .delay не задерживается

Пример: $("div").html("clicked").delay(2000).html("2 seconds have passed");

Что происходит: ДИВ получает «2 секунд прошли» с летучей мыши, вместо того чтобы сказать «щелкнули» в течение 2 секунд, а затем отображения «2 секунд прошли».

Нужно ли мне что-то делать, .delay(2000, function() { $("div").html("2 seconds have passed"); })?

Живой пример здесь: http://jsbin.com/UfaYusU/1/edit

Спасибо!

+1

вам нужно поставить его в очередь() –

ответ

3

$ .delay используется для задержки анимации в очереди, а не для остановки выполнения.

Попробуйте это:

setTimeout(function() { 
      // Do something after 2 seconds 
}, 2000); 
2

.delay() по умолчанию работает только с оживляющими функциями, вы можете использовать .promise() метод:

$("div").html("clicked").delay(2000).promise().done(function() { 
    $(this).html("2 seconds have passed"); 
}); 
+0

«работает только с анимационными функциями», на самом деле я не знаю. Работает для всего, что помещается в очередь –

+0

@ A.Wolff Да, технически это правильно, я имел в виду _ по умолчанию. – undefined

+0

Я никогда не думал об использовании .promise() в этом случае, хороший даже сейчас несколько кликов в строке, кажется, нарушает его. Http://jsfiddle.net/fsvFj/ –

0

Используйте setTimeout() если вы хотите запустить код после задержки .. .

$("button").click(function(e) { 
    $("div").html("clicked"); 
    setTimeout(function() { 
    $("div").html("2 seconds have passed"); 
    }, 2000); 
}); 

Here's an updated version of your jsbin...