2011-03-08 45 views
2

我有我的代碼有問題正常工作,我有2個表裝入兩個div像這樣:的setTimeout不使用jQuery和load()

loadTable($("#vbeTable"),'getUpdateA') 
loadTable($("#vbcTable"),'getUpdateB') 

我也有這樣的:

$("#vbeTable, #vbcTable").live('mouseover mouseout', function(event) { 
    if (event.type == 'mouseover') { 
//  console.log('hovering over',$(this)); 
     $(this).attr('update',false) 
    } else { 
//  console.log('NOT hovering over',$(this)); 
     $(this).attr('update',true) 
    } 
}) 

和可裝入函數是​​如下所示:

function loadTable($table, $php, $noRefresh){ 
    if($table.attr('update') == 'false'){ 
     console.log('not updating', $table, $table.attr('update')) 
     setTimeout(function() { loadTable($table, $php); }, 1000) 
    } 
    $table.load($php+'.php',function(response, status, xhr) { 
     if (status == "success") { 
      if(!$noRefresh){ 
       console.log('acquired table') 
       setTimeout(function() { loadTable($table, $php); }, 1000) 
      } 
     } 
     else { 
      console.log('error aquiring lock on', $table.attr('id'), response, status, xhr) 
     } 
    }); 

}

*由於某種原因,setTimeout函數不等待的時間適量並在控制檯中我得到:

(96)liveLoads.js:35acquired表
(7711)liveLoads.js:29not更新[<div id=​"vbcTable" update=​"true">​…​</div>] false
(2)<exception> <exception> <exception> <exception> * orginally vbe和vbc都是空的div。

enyone可以幫我嗎?

* UPDATE *

我也有這樣的代碼:

function expand(EntID) { 
    console.log('expand',EntID) 
    $.ajax({ 
     url: "showRows.php?ID=" + EntID 
    }); 
} 

,當被點擊桌子上的東西,調用該函數運行。

但隨後的其他功能一個定時器,進入迷惑不解,他們被調用連續一百萬次,而不注意你打電話你超時的回調函數,而不是將它傳遞給超時的時間

回答

3

相反的:

// this will call loadTable right away and setTimeout will trigger the returned value in a sec. 
setTimeout(loadTable($table, $php), 1000) 

務必:

// setTimeout will trigger the anon. function in a sec 
setTimeout(function() { loadTable($table, $php); }, 1000) 

你也調用同一個功能,可裝入,從內部可裝入。而我在這無盡的循環中沒有看到休息。

+0

嗯,似乎工作。爲什麼只是'setTimeout(loadTable($ table,$ php),1000)'不起作用? – Neal 2011-03-08 21:25:06

+0

@maniator:就是這樣:)'setTimeout'的第一個參數需要是稍後調用的函數。相反,'loadTable($ table,$ php)'會被立即計算出來,它的*返回值*被傳遞給'setTimeout',這不是你想要的。 – Matchu 2011-03-08 21:25:31

+0

因爲loadTable($ table,$ php)實際上調用了loadTable。結果然後傳遞給setTimeout。 – Dimitry 2011-03-08 21:26:03

0

這部分看起來錯誤:

if (status == "success") { 
    if(!$noRefresh){ 
     console.log('acquired table') 
     setTimeout(loadTable($table, $php), 1000) 
    } 
} 

除了事實,這不正確的類型傳遞給setTimeout的(參數1必須是一個函數,你給它的函數調用可裝入的返回結果) - 我不認爲你想要它調用loadTable ANYWAY。而是調用一個解析數據並填充你的html元素的函數!所以:

if (status == "success") { 
    if(!$noRefresh){ 
     console.log('acquired table') 
     setTimeout(function() {drawMyTableWithThisData(someTable, data);}, 1000); 
    } 
}