JQuery - Использование .delay (), чтобы отложить .load ()? - PullRequest
3 голосов
/ 03 февраля 2011

Я только что столкнулся с проблемой использования метода .delay () jQuery (v 1.4.2), чтобы попытаться отложить следующий метод .load ().

Примерно так:

$('myElement').delay(500).load('myPage.php');

Кажется, он просто игнорирует .delay ().

Я даже придумал обходной путь примерно так:

setTimeout(function(){
    $('myElement').load('myPage.php');
}, 500);

Но это не так элегантно,Кто-нибудь еще сталкивался с этим и нашел лучшее решение?

Спасибо.

Ответы [ 3 ]

15 голосов
/ 03 февраля 2011

Да, метод delay() (документы) будет игнорироваться, поскольку load()(документы) метод не ставится автоматически в очередь.

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

$('myElement').delay(500).queue(function( nxt ) {
    $(this).load('myPage.php');
    nxt();
});

Функция добавлена ​​в очередь.Затем вам нужно вызвать параметр функции, чтобы освободить очередь.Есть метод, называемый dequeue() (docs) метод, который также может выполнить это.

3 голосов
/ 13 ноября 2014

Вот мое решение - вывести из div, затем загрузить в него новый контент, а затем вернуть его обратно. Это действительно полезно для вызовов AJAX, например, для загрузки результатов поиска.

$('.search').keyup(function(){
    var query= $(this).val();
    $('.results').fadeOut('300');
    setTimeout(function(){
        $('.results').load('search.php?search=' + query, function() {
            $('.results').fadeIn('300'); 
        })
    }, 300);
    return false;
});
2 голосов
/ 03 февраля 2011

Если вы используете плагин таймеров jQuery, вы можете сделать

$('myElement').oneTime(500, function() { 
    $(this).load('myPage.php');
});
...