如何将javascript var的innerHTML设置为php / html文本

时间:2012-06-30 06:15:07

标签: php javascript html escaping innerhtml

我以为我明白了如何逃避事情,但这只是让我大吃一惊。我需要使用这个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>';
?>;

3 个答案:

答案 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);
?>';