php добавляет = "" в конец строки, когда я пытаюсь отобразить кнопку в свойстве onclick.
Это получает данные sql на сервере XAMPP. Он проходит по циклу и по сути составляет календарь, показывающий все мои счета и оплачиваю ли я их каждый месяц. Я использую AJAX для обновления базы данных и изменения оплачиваемой стоимости нажатием кнопки каждый месяц.
Я пробовал различные методы использования одинарных и двойных кавычек и экранирования кавычек внутри строки, но я все еще не могу заставить его выводить правильно.
echo $billName
foreach ($months as $v) {
//$clickstring = 'onclick = "setCalendar("'.$billName.'","'.$v.'")';
$clickstring = "onclick=\"setCalendar(\"".$billName."\",\"".$v."\")";
if ($row["$v"] == "1") {
echo '<button class = "paidBtn green-text"'.$clickstring . '><i class = "fa fa-check" aria-hidden = "true"></i></button>';
} else {
echo '<button class = "unpaidBtn red-text"'.$clickstring.'><i class = "fa fa-times" aria-hidden = "true"></i></button>';
}
Скажем, например, на первой итерации $ billname = "Amazon"; и $ v = "jan". По первому эхо Амазонка верна. Однако, когда он использует ту же переменную при двойном щелчке, он вставляет перед ней пробел и, кажется, выполняет strtolower (). jan вставлен правильно, но после него добавляются дополнительные символы и кавычки. Вот вывод html из браузера:
<button class = "unpaidBtn red-text" onclick = "setCalendar(" amazon","jan") = ""><i class = "fa fa-times" aria-hidden = "true"></i></button>



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Проблема в том, что HTML-код, который вы повторяете, будет выглядеть примерно так
onclick = "setCalendar("something", "month")"
Обратите внимание, как у вас есть двойные кавычки внутри двойных кавычек в этом атрибуте HTML? Вы не можете этого сделать, потому что это преждевременно завершает ваш onclick. Вы можете обойти это различными способами, например, экранировать его с помощью \, но это усложняется, потому что тогда на вашем php вам нужно избегать \, который выглядит как \\, и это просто сходит с ума.
Только один из возможных способов переписать это, используя одинарные кавычки для аргументов onclick
echo $billName;
foreach ($months as $v) {
$className = ($row[$v] == 1) ? 'paidBtn green-text' : 'unpaidBtn red-text';
$icon = ($row[$v] == 1) ? 'check' : 'times';
echo "<button class=\"$className\" onclick=\"setCalendar('$billName', '$v'\")>";
echo "<i class=\"fa fa-$icon\" aria-hidden=\"true\"></i></button>";
}
Я также немного отредактировал это с помощью троичных файлов и удалил дважды, если у него был html, что является немного избыточным IMO. И убрал конкатенацию строк, чтобы ее было немного легче читать.
Я нашел решение. Я оставляю вопрос, если кто-то столкнется с той же проблемой. $ clickstring = "onclick = \" setCalendar ('". $ billName."', '". $ v."') \ "";
Спасибо за помощь и очистку кода. Результат ближе к тому, что мне нужно, но еще не совсем. Теперь это результат: <button class = "unpaidBtn red-text" onclick = "setCalendar ('Amazon', 'jan'") = ""> <i class = "fa fa-times" aria-hidden = "true "> </i> </button>