我有这个循环,为下拉列表生成链接。
$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>
任何指导和批评都值得赞赏。 如果您发现任何可能形成的不良习惯,请不要犹豫,要烘烤我。
答案 0 :(得分:1)
主教建议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>";
答案 1 :(得分:1)
您需要记住使用\
转义特殊字符的情况。$ret .= '<a onclick=\'changeFDD(\'' . $contents[$i] . '\')>' . $contents[$i] . "</a>";
或者如果您想使用双引号
$ret .= "<a onclick='changeFDD('{$contents[$i]}')'>{$contents[$i]}</a>";
两者都会返回相同的结果。