Неопределенный строковый литерал в JQuery - PullRequest
1 голос
/ 01 сентября 2009

Я использовал cakePhp Form-> input, чтобы создать выпадающий список внутри JQuery, используя

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

Но он показывает мне ошибку как литерал Unterminated String ... Почему так ???

Ответы [ 3 ]

5 голосов
/ 01 сентября 2009

Я думаю, что у вас могут быть проблемы, если ваш 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';
0 голосов
/ 01 сентября 2009

Цветовая кодировка дает подсказку. Вы вкладываете одинарные кавычки в одинарные кавычки. Оберните ваш php-код в двойные кавычки, и все должно улучшиться:

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

Вложенные одинарные кавычки больше не являются неоднозначными и интерпретируются правильно.

0 голосов
/ 01 сентября 2009

Возможно, вам нужно экранировать одинарные кавычки в выводе $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))
                ),
   "'"
   );
?>
');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...