【问题标题】:How to set javascript var's innerHTML to php/html text如何将 javascript var 的 innerHTML 设置为 php/html 文本
【发布时间】:2012-07-01 14:01:11
【问题描述】:

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

【问题讨论】:

  • 选项标签中的值属性没有被引用
  • 你说Its crashing是什么意思?

标签: php javascript html escaping innerhtml


【解决方案1】:

您需要将 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>\';';
?>;

【讨论】:

    【解决方案2】:

    echo 和正在生成的字符串之间需要有一个空格。

    此外,您生成的 HTML 并未在选项的 value 属性周围加上引号。

    试试这个: echo '&lt;option value="'.$user['fname'].' '.$user['lname'].'"&gt;'.$user['fname'].' '.$user['lname'].'&lt;/option&gt;';

    【讨论】:

      【解决方案3】:

      您的引用存在问题,它肯定会引发 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);
      ?>';
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-13
        • 1970-01-01
        • 2011-05-15
        • 2020-09-22
        • 1970-01-01
        • 1970-01-01
        • 2016-03-02
        • 2014-12-12
        相关资源
        最近更新 更多