PHP инкапсулирует переменную как строку - PullRequest
0 голосов
/ 23 сентября 2018

У меня есть этот цикл, который генерирует ссылки для выпадающего списка.

$count = count($this->contents);
for($i = 0; $i < $count; $i++)
{
        $this->ret .= "<a onclick='changeFDD(" . strval($this->contents[$i]) . ")'>" . $this->contents[$i] . "</a>";
}

Это приводит к следующему списку

<div id="fddContentID" class="fddContent">
<a onclick="changeFDD(Mr.)">Mr.</a>
<a onclick="changeFDD(Mrs.)">Mrs.</a>
<a onclick="changeFDD(Ms.)">Ms.</a>
</div>

Проблема в том, что мне нужно, чтобы параметры были строками.Я бы предположил, что strval мог бы выполнить это.

Когда я просто пытаюсь вставить одинарные кавычки, это немного сбрасывает структуру.

PHP с одинарными кавычками

$this->ret .= "<a onclick='changeFDD('" . strval($this->contents[$i]) . "')'>" . $this->contents[$i] . "</a>";

Возвращенный результат HTML

<div id="fddContentID" class="fddContent">
<a onclick="changeFDD(" mr.')'="">Mr.</a>
<a onclick="changeFDD(" mrs.')'="">Mrs.</a>
<a onclick="changeFDD(" ms.')'="">Ms.</a>
</div>

Я понимаю, почему результат таков, что я не понимаю, как я могу инкапсулировать эту переменную, чтобы Javascript обрабатывал ее правильно.

Дополнительная чуть более подробная информация

Я работаю над конструктором форм в PHP, и я создал собственное выпадающее окно, используя кнопку и div, которые я контролирую его видимостью с помощью Javascript и CSS.В этом раскрывающемся списке каждый элемент является ссылкой.

Когда вы нажимаете на ссылку, запускается функция Javascript changeFDD (nVal)

function changeFDD(nVal) {
  document.getElementById("fddBtnID").value = nVal;
  alert("test");
}

nVal соответствует новому значению, которое будет иметь кнопка.

Когда я генерируюэтот выпадающий список, метод, который перебирает массив, отображает эти ссылки, единственная проблема в том, что у меня возникают проблемы с инкапсуляцией переменной в кавычки, так как в этой области уже столько цитат.Я попробовал несколько функций, таких как strval и приведение его в виде строки, но результаты остались прежними.

Вот схема раскрывающегося списка

<div class="FDDWrap">
<button onclick="fddDrop()" id="fddBtnID" class="fddBtn">Mr.</button>
<div id="fddContentID" class="fddContent">
<a onclick="changeFDD(Mr.)">Mr.</a>
<a onclick="changeFDD(Mrs.)">Mrs.</a>
<a onclick="changeFDD(Ms.)">Ms.</a></div>
</div>

Любые и все рекомендации или критика приветствуются.Если вы видите потенциально вредные привычки, не стесняйтесь жарить меня.

Ответы [ 2 ]

0 голосов
/ 23 сентября 2018

Вам нужно помнить об экранировании специальных символов с помощью \

$ret .= '<a onclick=\'changeFDD(\'' . $contents[$i] . '\')>' . $contents[$i] . "</a>";

или если вы хотите использовать двойные кавычки

 $ret .= "<a onclick='changeFDD('{$contents[$i]}')'>{$contents[$i]}</a>";

Оба возвращают одинаковые результаты.

0 голосов
/ 23 сентября 2018

Как предположил епископ, json_encode - хороший способ для достижения этой цели.

Вместо

$this->ret .= "<a onclick='changeFDD(" . strval($this->contents[$i]) . ")'>" . $this->contents[$i] . "</a>";

json_encode легко справился с задачей

$this->ret .= "<a onclick='changeFDD(" . json_encode($this->contents[$i]) . ")'>" . $this->contents[$i] . "</a>";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...