我在使用某些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;字线后的字符。
好的,所以我想我最好在这个字符串周围添加一些引号。但是......当我这样做时,没有任何作用。
答案 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)