2010-10-04 35 views
4

我有這個這個jQuery加載在一個模式成功的消息:調用一些jQuery的.load後3秒()

$('#menu_access').load(
    site_url + sUrl, 
    function() { 
     $(this).dolPopup(oPopupOptions); 
    } 
); 

我要調用此函數加載三秒之後:

$('#menu_access').dolPopupHide({}); 

我不知道如何去做。我不太熟悉.load()函數。

+0

.load()是出了名(和設備特別是)不可靠,保證整個DOM被加載(從而使你'#node'),而不是:'$(函數(){/ *你的東西在這裏} - 許多人在完成圖像加載時嘗試使用.load()(這不包含在'DOM-loaded'中),並且會受到很多痛苦,例如,如果已經緩存了no load()事件... ) – 2015-11-06 10:26:12

回答

5

使用setTimeout(...)

$('#menu_access').load(
    site_url + sUrl, 
    function() { 
     var menuAccess = $(this); 
     menuAccess.dolPopup(oPopupOptions); 
     setTimeout(function() { 
      menuAccess.dolPopupHide({}); 
     }, 3000); 
    } 
); 
+0

hmm ...由於某種原因不工作這是從函數內調用 – tmartin314 2010-10-04 01:39:54

+0

'this'不是在這裏傳遞給'setTimeout()'的函數內部的適當元素 – 2010-10-04 01:49:52

+0

@Nick你說得對。我不知道我是怎麼錯過的,我修好了。謝謝! – 2010-10-04 01:55:41

8

電話您可以使用jQuery's delay() method,但你需要你的插件調用添加到使用jQuery's .queue() method隊列。

$('#menu_access').load(
    site_url + sUrl, 
    function() { 
     $(this).dolPopup(oPopupOptions); 
     $(this).delay(3000) 
       .queue(function(nxt) { 
         $(this).dolPopupHide({}); 
         nxt(); 
       }); 
    } 
); 

注意,參數傳遞給.queue()需要的功能,以使一個動畫出現(任何時候)被調用。

或者,您可以使用setTimeout(),但您需要確保this的值在回調中正確。

$('#menu_access').load(
    site_url + sUrl, 
    function() { 
     $(this).dolPopup(oPopupOptions); 
     var that = this; 
     setTimeout(function() { 
         $(that).dolPopupHide({}); 
       }, 3000); 
    } 
); 

這裏this由可變that引用。

或者您可以使用jQuery's $.proxy() method來確保this的正確含義。

$('#menu_access').load(
    site_url + sUrl, 
    function() { 
     $(this).dolPopup(oPopupOptions); 
     setTimeout($.proxy(function() { 
         $(this).dolPopupHide({}); 
       }, this), 3000); 
    } 
); 
+0

我在哪裏添加$(this).dolPopupHide({});? – tmartin314 2010-10-04 01:42:48

+0

@what - 對不起,我應該在'.dolPopup(oPopupOptions)'的位置。我會糾正的。 – user113716 2010-10-04 01:45:09

+2

+1 - 完整和正確,好奇其他答案如何得到+3,一個人的低效和一個人的錯誤....'setTimeout()'是*絕對*的方式去這裏。 – 2010-10-04 01:53:41