2010-07-05 110 views
2

我在使用某些javascript时遇到了一些麻烦。我使用jQuery来动态地将行 添加到表中。此外,JavaScript是从一些PHP和Kohana代码生成的。将HTML存储到javascript变量中

这是脚本。

<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中,它不起作用。 Google Chrome没有任何反应。在IE中,我在页面上出现错误。该错误是一个语法错误。它不喜欢字线后面的<字符。

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

+0

你可以显示什么是在Firefox版本输出? – Duniyadnd 2010-07-05 01:00:47

回答

5

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

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

编辑:,当你把它周围的引号不工作的原因是因为HTML包含引号。上面的代码将正确地转义引号。

+0

你是对的,'form :: dropdown()'返回一串HTML。 – alex 2010-07-05 01:11:09

+0

Frantastic。不是我会想到的,但效果很好!非常感谢。 – Matt 2010-07-05 01:23:14

+0

其实我对引号非常小心,但我仍然无法使它工作。所以json编码版本完成了这项工作。 – Matt 2010-07-05 01:25:09

2

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

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

可以工作(你应该也可能逃脱'

+0

这就是我认为可能的工作,但实际上它根本不起作用。 – Matt 2010-07-05 01:22:47

-2

强烈建议您使用jQuery DOM创建插件

这将是很多,更容易。

+2

我不明白为什么。 HTML由Kohana生成,所以我不明白为什么有必要模仿该功能的客户端。据我所知,它可能依赖于数据库中的某些东西,并且不可能实现客户端。 – icktoofay 2010-07-05 01:18:46

+0

我误解了你的问题。 – GerManson 2010-07-05 01:40:25