我以为我明白了如何逃避事情,但这只是让我大吃一惊。我需要使用这个html / php组合文本:
<select name="mainUsers" class="manageSelect">
<?php
$users = getAllUsersByUserId($userid);
echo'<option value="choose">Select a user...</option>';
while($user = mysql_fetch_array($users)) {
echo'<option value='.$user['fname'].' '.$user['lname'].'>'.$user['fname'].' '.$user['lname'].'</option>';
}
?>
</select>;
并将其设置为javascript var的innerHTML。它崩溃了,因为我没有正确的转义语法。
编辑:很抱歉不清楚。这不起作用,我不知道为什么:cell2.innerHTML =
<?php
echo '<select name="mainUsers" class="manageSelect">';
$families = getAllFamiliesByUserId($userid);
echo '<div id="famSelect"><option value="choose">Select a family...</option></div>';
while($family = mysql_fetch_array($families)) {
echo '<div id="famSelect"><option value="'.$family['name'].'">'.$family['name'].'</option></div>';
}
echo '</select>';
?>;
答案 0 :(得分:2)
您需要将innerHTML设置为包含HTML的字符串。在JavaScript中,您需要用引号分隔该字符串,所以:
cell2.innerHTML =
<?php
echo '\'<select name="mainUsers" class="manageSelect">';
$families = getAllFamiliesByUserId($userid);
echo '<div id="famSelect"><option value="choose">Select a family...</option></div>';
while($family = mysql_fetch_array($families)) {
echo '<div id="famSelect"><option value="'.$family['name'].'">'.$family['name'].'</option></div>';
}
echo '</select>\';';
?>;
答案 1 :(得分:1)
您需要在 echo 和正在生成的字符串之间留一个空格。
此外,您生成的HTML不会在选项的value属性周围加上引号。
试试这个:
echo '<option value="'.$user['fname'].' '.$user['lname'].'">'.$user['fname'].' '.$user['lname'].'</option>';
答案 2 :(得分:1)
你引用的问题,它会引发一个javascript错误。现在您的代码如下:
cell2.innerHTML = <select>...</select>
但它应该是
cell2.innerHTML = '<select>...</select>'
所以在你的php标签周围加上单引号
cell2.innerHTML = '<?php
//...
?>';
这项工作没有任何转义因为你不使用你的HTML代码中的任何单引号。但转义很简单:只需用\'替换所有单引号即可。像这样: cell2.innerHTML ='
<?php
$html = '<select name="mainUsers" class="manageSelect">';
$families = getAllFamiliesByUserId($userid);
$html .= '<div id="famSelect"><option value="choose">Select a family...</option></div>';
while($family = mysql_fetch_array($families)) {
$html .= '<div id="famSelect"><option value="'.$family['name'].'">'.$family['name'].'</option></div>';
}
$html .= '</select>';
echo addslashes($html);
// Addslashes also slahses double quotes("). If this is causing problems try: echo str_replace("'", "\\'", $html);
?>';