Javascript倒计时不适用于php循环

Javascript倒计时不适用于php循环,php,javascript,loops,timer,countdown,Php,Javascript,Loops,Timer,Countdown,你好,我和我的一个朋友有一个黑手党游戏。我有一个倒计时代码,但它只在我使用一个计时器时起作用。但我需要在一个循环中使用它,以便在表中获得更多计时器。我在谷歌上搜索了一下,但没有任何帮助。我看到我必须使用不同的身份证,但这对我来说不起作用。我对javascript知之甚少 这是我的密码: While循环: while($info = mysql_fetch_object($dbres)) { $j = 0; $bieding = mysql_fetch_object(mysql_query("SE

你好,我和我的一个朋友有一个黑手党游戏。我有一个倒计时代码,但它只在我使用一个计时器时起作用。但我需要在一个循环中使用它,以便在表中获得更多计时器。我在谷歌上搜索了一下,但没有任何帮助。我看到我必须使用不同的身份证,但这对我来说不起作用。我对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>';
}
while($info=mysql\u fetch\u object($dbres))
{
$j=0;
$bieding=mysql\u fetch\u对象(mysql\u查询(“从`biedingen`WHERE`veilingid`='{$info->id}'按`bedrag`DESC LIMIT 1'顺序选择`bedrag`”);
$tijd=($info->tijd+$info->duur*60*60-$time);
回声'
“.veilingnaam($info->id,1,1)。”
“.usernaam($info->veiler,1,1)。”
&欧元;'.getal($bieding->bedrag)。'
';
}
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>

var秒=;
var倒计时=document.all?document.all[“teller”]:document.getElementById?document.getElementById(“出纳员”):“”;
var woord=“seconden”;
函数显示()
{
秒=秒-1;
如果(秒==1){woord=“seconde”;}
如果(秒==0){woord=“seconden”;}

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

可能的解决办法:

  • 添加jQuery的选择器,类似于
    $(“div.teller”)。每个(function(){…})
    都在该函数中创建一个计时器和/或与该
    div
    相关联的任何其他JavaScript代码。请注意,这需要
    div
    获得CSS类“teller”
  • 在PHP的
    while
    循环中创建每个DB表行所需的所有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>

var data=;//不建议使用
//通过保存的ID获取对div的引用(秒已保存
对于(i=0;i

现在,调整
display()
以处理
数据
数组的元素。

次要备注:不要用母语编写代码,很难与人共享[这个问题就是证明]。我不会说你的语言,所以这个问题有点难理解,但我相信它可能会帮助你查找文档,查找连续计时执行的
setInterval
,作为单个
setTimeout
的替代方案。另外,必须:不要使用
mysql\u query
,它已被弃用,原因是你无法使用在这里,它允许您简单地创建一个sql注入脚本…学习如何使用PDO。您是在php脚本之后调用javascript吗?并确保脚本在$(document).ready()函数()之后运行({};可以进一步解释吗?我不太明白你的意思。假设你的表有3行。那么,你想要3个计数器/计时器,对吗?但是,你的JavaScript代码只执行一次。在浏览器中打开你的页面(从本地主机,而不是直接从磁盘)然后查看源代码。你会看到PHP生成了什么。检查你的
,它应该会更清晰。我希望这对你有帮助。好的,我的数据库中有两行。当我在浏览器中查看源代码时,我看到这两行有两个脚本源,但第二行完全被忽略。因此,你的
也在某个PHP的循环中?你没有n以前是这样。但是,请检查您的ID。如果我没有弄错的话,我希望它们都是
teller
,这就是它不起作用的原因。您需要每个ID的JavaScript代码。好的,现在我设法使每个循环的ID都发生变化。例如,ID=tell0到ID=tell1。但是现在时间从最后一个计时器开始计时,而不是从第一个计时器开始计时。