Javascript blues in PHP: getElementById & getElementsByC

Javascript blues in PHP: getElementById & getElementsByClassName

本文关键字:amp getElementsByC getElementById blues in PHP Javascript      更新时间:2023-09-26

这应该很简单,唉,它给我带来了问题:

有一个PHP页面,它为我提供了最多三个不同的td内容迭代。第一个用display: table-cell显示,其他用display: none隐藏。

echo '<td style="display: table-cell" class="gameLineCell" id="'.$playerLine.'" colspan="3">';

&

echo '<td style="display: none" class="gameLineCell" id="'.$playerLine.'" colspan="3">';

然后,我有一个对应于每个td选项的链接 - 单击它应该运行一个函数loadLine,我将一个对应于td ID的字符串传递

到其中。
echo "<a onclick='loadLine(".$playerLine.")' href='javascript:void(0)'>".$playerLine."</a>";

该脚本隐藏了类gameLineCell的所有td,并显示被单击链接的那个。

<script>
    function loadLine(line) {
        var lines = document.getElementsByClassName('gameLineCell');
        for (var i = 0; i < lines.length; i++) {
            lines[i].style.display = 'none';
        }
            document.getElementById(line).style.display = 'table-cell';
    }
</script>

当我查看我的 PHP 页面的源代码时,一切都正确呈现 - 我的链接在loadLine括号中显示正确的字符串,我的每个td都存在,第一个显示,其他隐藏 - 但是我的链接不起作用。我尝试删除getElementsByClassName序列,仅运行getElementById,尽管无济于事。什么也没发生。

有什么想法吗?

非常有义务提供任何帮助,

安德鲁


编辑:错误的来源?Javascript正在削减我的字符串!EV-F1 成为 EV。现在研究原因以及如何修复。

这里有一些与字符串的正确转义和封闭有关的问题;我个人使用printf()来打印 HTML,如下所示:

printf('<td style="display: table-cell" class="gameLineCell" id="%s" colspan="3">',
    htmlspecialchars($playerLine, ENT_QUOTES, 'UTF-8');
);

这段代码尤其棘手:

echo "<a onclick='loadLine(".$playerLine.")' href='javascript:void(0)'>".$playerLine."</a>";

问题是$playerLine不包含JavaScript字符串外壳,因此它会尝试将EV-F1解析为EV - F1(即EVF1的减法(。要解决此问题,您需要使用 JSON 对变量进行编码,然后应用 HTML 转义:

printf('<a onclick="loadLine(%s)" href="javascript:void(0)">%s</a>',
    htmlspecialchars(json_encode($playerLine), ENT_QUOTES, 'UTF-8'),
    htmlspecialchars($playerLine), ENT_QUOTES, 'UTF-8')
);

您显示的代码有拼写错误。这里有一个额外的)

for (var i = 0; i < lines.length); i++)

它应该是

for (var i = 0; i < lines.length; i++)