2013-06-18 30 views
0

你好,我我和一個朋友有一個maffia遊戲。我有一個倒數計時器代碼,但它只適用於我使用一個計時器。但我需要在循環中使用它來獲取更多的定時器。我在谷歌搜索,但沒有什麼幫助。我看到我不得不使用不同的身份證,但這不適合我。我對JavaScript有一點認識。Javascript倒計時不適用於PHP循環

這是我的代碼:

While循環:

while($info = mysql_fetch_object($dbres)) 
{ 
$j = 0; 
$bieding = mysql_fetch_object(mysql_query("SELECT `bedrag` FROM `biedingen` WHERE `veilingid`='{$info->id}' ORDER BY `bedrag` DESC LIMIT 1")); 
$tijd = ($info->tijd + $info->duur * 60 * 60 - $time); 
echo '<tr> 
<td>'.veilingnaam($info->id,1,1).'</td> 
<td>'.usernaam($info->veiler,1,1).'</td> 
<td>&euro;'.getal($bieding->bedrag).'</td> 
<td><div id="teller'.$j.'"></div></td> 
</tr>'; 
} 

JavaScript部分:

<script type="text/javascript"> 
var seconds = <?= ($tijd+1) ?>; 
var countdown = document.all? document.all["teller<?= $j?>"] : document.getElementById?   document.getElementById("teller<?= $j?>") : ""; 
var woord = "seconden"; 
function display() 
{ 
seconds=seconds-1; 
if(seconds==1){ woord="seconde"; } 
if(seconds==0){ woord="seconden"; } 
if(seconds<0) 
{ 
    self.location.replace(self.location); 
} 
else 
{ 
    if (countdown) 
    { 
     countdown.innerHTML=seconds+" "+woord; 
     setTimeout('display()',1000); 
    } 
} 
} 
display(); 
</script> 
+2

小問題:不要用母語編寫代碼,它很難與人分享[這個問題是一個證明]。 – moonwave99

+0

我不會說你的語言,所以這個問題有點難以理解,但我相信它可以幫助你查找'setInterval'的文檔以連續定時執行,作爲單個'setTimeout'的替代方案。 – Kzqai

+0

,強制性的:不要使用'mysql_query',因爲你可以在這裏看到的原因,它不允許使用'mysql_query',它允許你簡單地創建一個sql-injectable腳本...學習如何使用PDO。 – Kzqai

回答

0

while循環經過錶行的數據庫,但你的JavaScript代碼是不是該循環的一部分。這意味着你產生於各行的HTML表格,但你創建<script>...</script>只包括$tijd/$j的最後一行(假設你的while執行腳本添加到頁面之前

可能的解決方法:

  • 添加一個jQuery的選擇,像$("div.teller").each(function(){...});並在該函數創建一個定時器和/或你需要與div
    注意相關的任何其他JavaScript代碼,這需要你div得到一個CSS類「出納」。
  • 在PHP的while循環內創建每個數據庫錶行所需的所有JavaScript代碼,但這可能會變得非常混亂。

另外,我建議你看一看JavaScript的setInterval(),因爲它比setTimeout()你想要做什麼比較合適。

另一件需要考慮的事情是:所有的計時器都會有一秒鐘的計時器。在我看來,最好只有一個計時器,並在JavaScript數組中保留秒數(無論可能是多少)(這個很容易在PHP的while循環中創建)。

編輯:下面是做到這一點的一種方法:

$data = array(); 
while($info = mysql_fetch_object($dbres)) 
{ 
    ... /* your current code */ 
    $data[] = "{ id: 'teller$j', seconds: $tijd }"; 
} 
$data = "[ ".implode(", ", $data)." ]"; 

現在,創建你的JavaScript代碼循環外

<script type="text/javascript"> 
var data = <?php echo $data; ?>; // It is not advisable to use <?= ... ?> 
// Get references to divs via saved ids (seconds are already saved 
for (i = 0; i < data.length; i++) 
    data.div = document.getElementById(data.id); // No need for document.all; IE supports getElementById since version 5.5 
... 
</script> 

現在,適應display()一起工作您的data陣列的元素。

+0

是否可以進一步解釋?我不明白你的意思。 – user2497030

+0

假設你的桌子有3排。所以,你需要3個計數器/定時器,對吧?但是,您的JavaScript代碼只執行一次。在瀏覽器中(從本地主機,而不是直接從磁盤)打開頁面並查看源代碼。你會看到PHP產生了什麼。檢查你的'',它應該更清楚。我希望這可以幫助你。 –

+0

好的,我的數據庫中有2行。當我在瀏覽器中查看源代碼時,我看到2行包含2個腳本源,但第二個完全忽略。 – user2497030