0

你好,我和一个朋友有一个黑手党游戏。我有一个倒数计时器代码,但它仅在我使用一个计时器时才有效。但我需要在循环中使用它以在表中获取更多计时器。我在谷歌上搜索但没有任何帮助。我看到我必须使用不同的 ID,但这对我不起作用。我对javascript知之甚少。

这是我的代码:

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>
4

1 回答 1

0

您的 while 循环遍历数据库中的表行,但您的 JavaScript 代码不是该循环的一部分。这意味着您为每一行生成一个 HTML 表,然后您创建<script>...</script>其中包括$tijd/$j仅用于最后一行(假设您while在脚本添加到页面之前执行。

可能的解决方法:

  • 添加一个 jQuery 的选择器,类似$("div.teller").each(function(){...});并在该函数中创建一个计时器和/或任何其他您需要与它关联的 JavaScript 代码div
    请注意,这需要您div获得一个 CSS 类“出纳员”。
  • 在 PHP 的循环中创建每个 DB 表行所需的所有 JavaScript 代码while,但这可能会变得非常混乱。

另外,我建议你看看 JavaScript's 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

于 2013-06-18T13:03:42.823 回答