JQuery中未终止的字符串文字

时间:2009-09-01 09:20:13

标签: jquery cakephp

我使用cakePhp Form->输入在JQuery中使用

创建一个Dropdown框
 $('<?php echo $form->input($r['Attribute']['label'], array('name'=>$r['Attribute']['label'],'options'=>array(1,2,3)));?>').appendTo("#main #EntrySubmit");

但它显示错误为未终止字符串文字...为什么这样???

3 个答案:

答案 0 :(得分:5)

如果您的PHP输出任何换行符,我认为您可能遇到问题。例如:

// BAD:
$('<div class="input select"><label for="Gender">
    Gender</label>').appendTo(...)

// GOOD:
$('<div class="input select"><label for="Gender">Gender</label>').appendTo(...)

如果是这种情况,请用空格或没有任何内容替换换行符:

// change from this:
$('<?php echo $form->input("blah", ...); ?>').appendTo(...)

// to this:
$('<?php echo str_replace(array("\r\n", "\r", "\n"), "", $form->input("blah", ...)); ?>')
    .appendTo(...)

...或者如果你想保留新的线条,你需要用斜线来逃避它们。

// this gives "Unterminated string literal"    
var x = 'abc
def';

// this gives you "abcdef"
var x = 'abc\
def';

答案 1 :(得分:-1)

您可能需要使用$form转义addslashes()输出中的单引号。

- EDIT2

addcslashesh()将转义字符\添加到指定字符。你的JS代码中有单引号,这就是你需要转义php输出中现有单引号的原因。

$("#main #EntrySubmit").append('
<?php 
echo addcslashes(
   $form->input($r['Attribute']['label'], 
                array('name'=>$r['Attribute']['label'],
                      'options'=>array(1,2,3))
                ),
   "'"
   );
?>
');

答案 2 :(得分:-1)

颜色编码提供了一个提示。您在单引号内嵌套单引号。用双引号包装你的PHP代码,事情应该改进:

$("<?php echo $form->input($r['Attribute']['label'], array('name'=>$r['Attribute']['label'],'options'=>array(1,2,3)));?>").appendTo("#main #EntrySubmit");

嵌套的单引号不再含糊不清,并且解释正确。