将HTML存储到javascript变量中

时间:2010-07-05 00:56:18

标签: php javascript kohana

我在使用某些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中,我在页面上收到错误。该错误是语法错误。它不喜欢&lt;字线后的字符。

好的,所以我想我最好在这个字符串周围添加一些引号。但是......当我这样做时,没有任何作用。

3 个答案:

答案 0 :(得分:5)

我只是假设form::dropdown正在吐出纯HTML。在Firefox中,这是用E4X解释的,然后在连接时变回字符串。 IE和Chrome不支持E4X。为了使它工作,你可以做这样的事情:

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

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

答案 1 :(得分:2)

Chrome不支持XML文字语法,你不能写,例如line = <div>foo</div>,您必须将数据包含在字符串中。

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

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

答案 2 :(得分:-2)

强烈建议您使用Jquery DOM Creation Plugin

这将是一件很容易的事。