0

我的 PHP 脚本查询数据库并将行作为 li 元素返回到 jQuery 对话框中的 div。它通过在 PHP while 循环中构建一个数组来处理查询行响应。每个 li 元素都有一些数据、一个 HTML 按钮和一些 JavaScript,以便在单击该按钮时在该 li 元素上执行。

如果我为每个 li 元素编写具有相同 id 的“坏 HTML”,则 javascript 会执行,但仅在第一个 li 元素上执行。当我为每个 li 元素编写具有唯一 id 的“好 HTML”时,我无法执行 javascript。我已经研究并尝试了很多东西,但找不到任何复杂的东西来解决这个问题。我该怎么办?这是精简的代码。问题似乎出在冗长的 $error_ListActives 行中,但我愿意接受建议。

$rowCount = 0;
while ($row = mysql_fetch_array($fetch)) {
    $storedStreetAddress = $row["streetAddress"];
    $storedCity = $row['city'];
    $error_NumberOfActives = "<li>Welcome back. You have . . .</li>";
    $errorMessages[0] = $error_NumberOfActives;
    $idMaker = "inactive" . $rowCount;
    $error_ListActives = "<li> $storedStreetAddress, $storedCity $idMaker
    <button type='button' id=$idMaker onclick='makeInactive()'>Pause this</button>
    <script type='text/javascript'>function makeInactive()
    //do stuff 
    {document.getElementById($idMaker).innerHTML='Inactive Completed';}
    </script> </li>";
    $errorMessages[] = $error_ListActives;
    $rowCount++;
    }
foreach( $errorMessages as $statusMessage ) {
    echo $statusMessage;
}

请具体,代码很有帮助。我在这方面没有很好地遵循一般说明,因为我是 PHP 新手。

4

3 回答 3

2

你会在这里遇到很多问题,因为你是在一个while循环中编写你的javascript函数。这意味着您将获得相同功能的多个副本,并且只有最后一个会真正触发!

要解决这个问题,请编写一个通用的 javascript 函数makeInactive(id),然后使用id您正在处理的元素调用它。

在 php 循环之外:

<script type='text/javascript'>function makeInactive(id)
//do stuff 
{document.getElementById(id).innerHTML='Inactive Completed';}
</script>

然后将php循环更改为:

while ($row = mysql_fetch_array($fetch)) {
$storedStreetAddress = $row["streetAddress"];
$storedCity = $row['city'];
$error_NumberOfActives = "<li>Welcome back. You have . . .</li>";
$errorMessages[0] = $error_NumberOfActives;
$idMaker = "inactive" . $rowCount;
$error_ListActives = "<li> $storedStreetAddress, $storedCity $idMaker
<button type='button' id='$idMaker' onclick='makeInactive($idMaker)'>Pause this</button>
 </li>";
$errorMessages[] = $error_ListActives;
$rowCount++;
}
于 2013-04-26T14:40:15.530 回答
0

为什么不:

<button onClick="makeInactive(<?php echo $row['id'] ?>);">...</button>

将 ID 代码作为参数嵌入到 MakeInactive() 调用中。其他替代方法是简单地使用一些 DOM,例如

<li id="xxx"><button onclick="makeInactive(this);">...</button></li>

<script>
function makeInactive(el) {
  el.getParent('li').disable(); // not real code, but shows the basic idea
}
</script>
于 2013-04-26T14:40:29.983 回答
0

首先,您在页面上多次创建相同的功能。您的其他按钮不知道makeInactive()要使用哪个功能。为什么不给所有按钮赋予相同的类,然后创建一个包含在单击按钮时触发的页面上的函数。

无意冒犯,但这是一种不好的标记。

于 2013-04-26T14:41:07.083 回答