当我尝试在onclick属性中回显按钮时,php在字符串末尾添加=“”。
这将在XAMPP服务器上获取sql数据。它循环遍历并构建一个基本上显示我所有帐单的日历,以及我是否每月都支付帐单。我正在使用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>
答案 0 :(得分:1)
问题是您要回显的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的if两次取出,这有点多余IMO。并取出了字符串连接以使其更易于阅读。
答案 1 :(得分:0)
我找到了解决方案。如果有人遇到相同的问题,我将不提问题。 $ clickstring =“ onclick = \” setCalendar('“。$ billName。”','“。$ v。”')\“”;