0

我使用 PHP 输出信息行。我试图为每一行添加一个隐藏/显示。我“ID”了该行,然后添加了一个简单的文本“Hide/Show”按钮,该按钮引用了 ID 行并尝试切换“display”属性。

我尝试转义引号,将它们更改为单引号,添加/删除括号。我不知所措。

echo "<table width=\"640\" style=\"margin-left: auto; margin-right: auto;\"><tr id=\"JEntry".$data['ID']."\" style=\"display: visible\"><td><button onmousedown=\"javascript: if (document.getElementById(\"JEntry".$data['ID']."\").style.display != \"visible\") { document.getElementById(\"JEntry".$data['ID']."\").style.display = \"visible\"; } else { document.getElementById(\"JEntry".$data['ID']."\").style.display = \"none\"; }\">Hide or Show</button>";

意外的标记 ”}”

4

1 回答 1

2

你的 PHP 代码很好。但是,生成的 HTML 需要对其属性进行转义。

例如,您的代码输出类似

<button onmousedown="javascript: if (document.getElementById("JEntry")) {}"></button>

如您所见,javascript 中的引号与属性值的引号相匹配。这将导致解析问题。

要解决此问题,请仅在 javascript 中使用单引号

<button onmousedown="javascript: if (document.getElementById('JEntry')) {}"></button>

或逃脱他们。

<button onmousedown="javascript: if (document.getElementById(\"JEntry\")) {}"></button>

在我看来,第一个选项看起来更整洁,特别是如果您考虑需要转义反斜杠 ( \)。所以你的固定代码是

echo "<table width=\"640\" style=\"margin-left: auto; margin-right: auto;\"><tr id=\"JEntry".$data['ID']."\" style=\"display: visible\"><td><button onmousedown=\"javascript: if (document.getElementById('JEntry".$data['ID']."').style.display != 'visible') { document.getElementById('JEntry".$data['ID']."').style.display = 'visible'; } else { document.getElementById('JEntry".$data['ID']."').style.display = 'none'; }\">Hide or Show</button>";

阅读本文的方式是非转义双引号 ( ") 是 PHP 的一部分,转义双引号 ( \") 是 HTML 的一部分,单引号 ( ') 是 JS 的一部分。

于 2019-06-13T22:32:26.973 回答