【问题标题】:Storing HTML into a javascript variable将 HTML 存储到 javascript 变量中
【发布时间】:2010-07-05 00:56:18
【问题描述】:

我在使用一些 javascript 时遇到了一些问题。我正在使用 jQuery 动态添加行 到一张桌子。此外,JavaScript 是从一些 PHP 和 Kohana 代码生成的。

这是脚本。

<script type="text/javascript">   
    function delExtensionNumber(element){
        $(element).prev().attr('value', 'X'); 
        $(element).parent().parent().hide();
    }

    function addExtensionNumber(){
        lines = <?php echo form::dropdown($ext_id."[did]", $lines, ''); ?>;
        extensions = <?php echo form::dropdown($ext_id."[extension]", $phones, ''); ?>;

        $('#line-extensions > tbody:last').append('<tr><td>'+lines+'</td><td>'+extensions+'</td><td><input type="hidden" name="'+<?php echo $ext_id;?>+'[state]" value="0" /><a class="hide" onclick="delExtensionNumber(this)"></a></td></tr>');

        <?php $ext_id++; ?>
    }
</script>

这在 Firefox 中运行良好。但是在 IE 和 Chrome 中它不起作用。谷歌浏览器没有任何反应。在 IE 中,我在页面上收到错误消息。该错误是语法错误。它不喜欢字行后面的

好的,所以我想我最好在这个字符串周围加上引号。但是......当我这样做时,没有任何效果。

【问题讨论】:

  • 你能显示Firefox版本的输出吗?

标签: php javascript kohana


【解决方案1】:

我只是假设form::dropdown 正在输出纯 HTML。在 Firefox 中,这是用E4X 解释的,然后在连接时转回字符串。 IE 和 Chrome 不支持 E4X。要使其正常工作,您可以执行以下操作:

lines = <?php echo json_encode(form::dropdown(...)); ?>;

编辑:当你在它周围加上引号时它不起作用的原因是因为 HTML 包含引号。上面的代码将正确地转义引号。

【讨论】:

  • 你是对的,form::dropdown() 确实返回了一个 HTML 字符串。
  • 太棒了。不是我想的那样,但效果很好!非常感谢。
  • 实际上我对引号非常小心,但我仍然无法使其工作。所以 json 编码版本完成了这项工作。
【解决方案2】:

Chrome 不支持 XML 文字语法,你不能写例如line = &lt;div&gt;foo&lt;/div&gt;,你必须把数据封装成一个字符串。

lines = '<?php echo form::dropdown($ext_id."[did]", $lines, ""); ?>;'

可以工作(你也应该逃避'

【讨论】:

  • 我认为这可能行得通,但实际上它根本行不通。
【解决方案3】:

强烈推荐你使用 Jquery DOM Creation Plugin

这样会容易很多。

【讨论】:

  • 我不明白为什么。 HTML 是由 Kohana 生成的,所以我不明白为什么有必要在客户端模仿该功能。据我所知,它可能依赖于数据库中的某些内容,并且不可能在客户端实现。
  • 我误解了你的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-22
  • 2013-08-06
相关资源
最近更新 更多