Почему я продолжаю получать сообщение об ошибке «неожиданный токен» в этой строке кода? - PullRequest
0 голосов
/ 14 июня 2019

Я использую PHP для вывода строк информации. Я пытаюсь добавить скрыть / показать в каждой строке. Я «идентифицировал» строку, а затем добавил простую текстовую кнопку «Скрыть / Показать», которая ссылается на строку идентификатора и пытается переключить свойство «отображение».

Я попытался избежать кавычек, изменив их на одинарные, добавив / сняв скобки. Я в растерянности.

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>";

Неожиданный токен "}"

1 Ответ

2 голосов
/ 14 июня 2019

Ваш 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.

...