2011-02-03 2 views
3

jQuery의 .delay() 메소드 (v 1.4.2)를 사용하여 다음 .load() 메소드를 지연시키려는 문제가 생겼습니다. 그래서 같이jQuery - .delay()를 사용하여 .load()를 연기 하시겠습니까?

:

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

단지 .delay을 무시하는 것 같다(). 그 우아 아니라,

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

그러나 :

나는 evenutally과 같이 작업 주위에 알아 냈어요. 다른 누구든지이 문제를 해결하고 더 나은 해결책을 찾았습니까?

감사합니다.

+1

.delay '()는'만 수행되지 않고, 지정된 요소의 애니메이션을 제공하고,()의 setTimeout''에 효과를 따라 기능 – mVChr

답변

13

예, load()(docs) 메서드가 자동으로 대기열에 없기 때문에 delay()(docs) 메서드는 무시됩니다. 당신이 queue()(docs) 방법을 사용하여 큐에 load() 호출을 추가하는 경우가 기술적으로 .delay() 그것을 달성 할 수 있었다 불구하고 setTimeout

은 아마 당신의 최선의 선택입니다.

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

기능이 대기열에 추가됩니다. 그런 다음 함수의 매개 변수를 호출하여 큐를 비워야합니다. 이를 수행 할 수있는 dequeue()(docs) 메서드가 있습니다. 당신이 jQuery를 타이머를 사용하는 경우

+2

+1 흥미로운 대안 큐 지연. – Orbling

+1

@Orbling : 예, 좋은 지적입니다. 별도의 대기열을 작성하여 기본 대기열의 모든 항목에 영향을 미치지 않도록 할 수 있습니다. 이 메소드는 간단한'setTimeout()'보다 더 많은 오버 헤드를 필요로하며 실제로 볼 수있는 어떤 이점도 제공하지 않으므로 대신'setTimeout'을 사용합니다. – user113716

+0

훌륭한 설명을 해주신 Patrick 님, 지금이 점을 훨씬 잘 이해하고 있습니다. – AJB

3

여기가 다시 변색 다음에 새로운 내용을로드 한 후, 사업부를 페이드 아웃, 그리고 내 솔루션입니다 당신이

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

팁 Petah 주셔서 감사합니다, 나는 타이머 플러그인에 대해 몰랐습니다. 나는 그것을 잡아서 지금 조금 앞으로 놀 것이다. – AJB

2

을 할 수있는 플러그인. 이건 정말 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; 
}); 
+0

그게 전부 야! !!! 고맙습니다 ! – Zl3n

+0

안녕하세요. 다행 이군! 타이밍은 jQuery에서 항상 문제가되며 setTimeout은 절대로 실제로 그렇게하지 못했습니다 (특히 동시에 여러 개의 큐를 사용할 때, 대기열과 함께 사용하는 경우와 그렇지 않은 경우). 애니메이션 기간을 지연으로 사용하면 모든 것을 제어 할 수 있으며 동시에 여러 작업을 동시에 (또는 다른 시간에) "대기"할 수 있다고 생각합니다. –

관련 문제