2

我正在构建一个(最终)将成为游戏前端的网站。我希望能够动态构建用户能够购买的“权力”列表。为了构建这些列表,我使用基于 PHP 的 SQL 查询,然后将其传递给 Javascript 以进行动态选择(某些权力具有先决条件)。

  1. 我知道有一种更简单的方法可以做我正在做的事情,但我现在对此并不十分关心(我会稍后,但我正在尝试使其功能化然后清理)(再次,我知道这一点是非最优的)。
  2. 我正在使用 eval 解析要显示的 div,我想知道如何不显示。
  3. 我在首先正确构建我的 div 名称时遇到问题。

这是我的代码:Javascript(单独的文件)

function upgradeList(passed)
{
    var PowerArray = [];
    var DetailPowerID = [];
    var EscapedPowerID = [];
    PowerArray.push([]);
    PowerArray = eval(passed);
    var OutputThing="";
    for (i=0;i<PowerArray.length;i++)
    {
        DetailPowerID[i] = 'detail' + PowerArray[i][0];
        EscapedPowerID[i] = "'" + DetailPowerID[i] + "'";
    }
    for (i=0;i<PowerArray.length;i++)
    {
        OutputThing = OutputThing + "<br><a href='#' onClick='showUpgradeDetails(" + DetailPowerID[i] + ")'>" + PowerArray[i][2] + "</a><div class='hidden' id='" +
        DetailPowerID[i] + "'>" + PowerArray[i][3] + "</div>";  }
        document.getElementById("secondUpgrade").innerHTML=OutputThing;
        document.getElementById("secondUpgrade").style.display='block';
    }
}

PHP 编写 HTML 和 JS:{$AbleToUpgrade 和 $UpgradeList 都是由 SQL 查询构建的二维数组)

echo "<script name='UpgradeList'>";
settype($UpgradesListSize[$i],"int");
for ($i=0;$i<count($AbleToUpgrade);$i++)
{
    echo "var UpgradeList" . $AbleToUpgrade[$i][0] . " = new Array();";
    for ($j=0;$j<=$UpgradesListSize[$i];$j++)
    {
        echo "UpgradeList" . $AbleToUpgrade[$i][0] . ".push(Array('"
            . $UpgradeList[$i][$j][0] . "', '"
            . $UpgradeList[$i][$j][1] . "', '"
            . $UpgradeList[$i][$j][2] . "', '"
            . $UpgradeList[$i][$j][3] . "', '"
            . $UpgradeList[$i][$j][4] . "'));";
    }
}
echo "</script>";

... 然后...

echo "<div id='SpendUpgrade'>
    Select power to upgrade:
    <ul>";
    for ($i=0;$i<count($AbleToUpgrade);$i++)
    {
        echo "<li><a href='#' name='UpgradeList" . $AbleToUpgrade[$i][0] . "' onClick='upgradeList(this.name)'>" . $AbleToUpgrade[$i][1] . " - " . $AbleToUpgrade[$i][2] . "</a></li>";
    }
    echo "</select>
    <div id='secondUpgrade' class='hidden'>

    </div>
    <div id='thirdUpgrade' class='hidden'>

    </div>
</div>";

当我加载页面时,我会生成如下所示的文本:

<a href="#" onclick="showUpgradeDetails(detail21)">Real Armor</a>

和相应的div:

<div class="hidden" id="detail21" style="display: none;">Your armor only works in the Waking</div>

为了让 div 显示(display:block;),我需要像这样调用函数:

showUpgradeDetails("detail21")

但我不能让 JS / PHP 正确地写引号。请帮助(解决任何或所有这些问题?)!

4

1 回答 1

0

我找到了一个解决方案,但它不是JSON.parse()。我变成PowerArray = eval(passed);PowerArray = window[passed];

因为passed包含变量的名称,而不是变量本身,所以我无法直接使用它。但是,因为它是一个专门保存全局定义变量名称的字符串,所以我可以将它传递给window[]构造并让它工作。

于 2013-07-04T23:47:57.197 回答