Как передать код для вставки в JavaScript - PullRequest
2 голосов
/ 10 ноября 2009
<a href="" onClick="return select_item(<embed src=\"player.swf\" allowfullscreen=\"true\" quality=\"high\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\" FlashVars=\"id=&flv=1257568908_.flv\" type=\"application/x-shockwave-flash\" width=\"450\" height=\"371\"></embed>')>

Вышеприведенное возвращает ошибку «неопределенный строковый литерал».

Как решить эту проблему. Эта функция находится внутри шаблона smarty.

Спасибо за каждый ответ

Ответы [ 4 ]

3 голосов
/ 10 ноября 2009

Я также сталкивался с ситуациями, когда Smarty пытается оценить Javascript как код шаблона Smarty.

В этом случае вам необходимо окружить Javascript тегами {literal}{/literal}.


Однако, в вашем случае, я думаю, что вы пропускаете одинарную кавычку в начале select_item( и двойную кавычку в конце события onClick:

<a href="" onClick="return select_item('<embed src=\"player.swf\" allowfullscreen=\"true\" quality=\"high\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\" FlashVars=\"id=&flv=1257568908_.flv\" type=\"application/x-shockwave-flash\" width=\"450\" height=\"371\"></embed>')">

Я не уверен на 100%, действительно ли вам нужно использовать обратную косую черту в двойных кавычках, которые являются частью <embed HTML.

Для такой разметки мне легче читать и отлаживать, если вы не делаете это как часть события onClick. Я использую PrototypeJS, поэтому я бы с этим справился

<a href="#" id="doSelectItem">Click Here</a>


//Handle the click event of the above a tag
Event.observe($('doSelectItem'), 'click', function(event) {
  var markup = '<embed src=\"player.swf\" allowfullscreen=\"true\" quality=\"high\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\" FlashVars=\"id=&flv=1257568908_.flv\" type=\"application/x-shockwave-flash\" width=\"450\" height=\"371\"></embed>';

  if( select_item(markup) ) {
    //select_item returns true, so let the click event continue
  }else {
    //select_item returned false so cancel the click event.
    Event.stop(event);
  }
});
1 голос
/ 10 ноября 2009

Если вы получите

unterminated string literal

тогда это в основном означает, что вы начали String, но никогда не заканчивали его. Э.Г.

var foo = "bar;

Решение очевидно: прекратить его:

var foo = "bar";

Другая распространенная причина - использование таких же кавычек внутри строки, как и для строки:

var foo = "my mom said "go out!" to me";

Вам нужно экранировать такие кавычки:

var foo = "my mom said \"go out!\" to me";

В вашем конкретном случае у вас есть " внутри строки HTML, которая в свою очередь обернута внутри другого " s атрибута onclick. Итак:

<a href="" onClick="return select_item('<embed src="player.swf" ...

необходимо заменить на

<a href="" onClick="return select_item('<embed src=\"player.swf\" ...
0 голосов
/ 10 ноября 2009

В кавычках в javascript и HTML так много путаницы, особенно когда они смешаны следующим образом.

Сразу же, попытаться избежать этой ситуации, в первую очередь . HTML для разметки, Javascript для поведения. Тем не менее ...

В Javascript вы избегаете кавычек с обратной косой чертой. Это так, что когда javascript интерпретирует строку, он знает, где она заканчивается.

var name = 'O\'Reilly';

В HTML вы используете амперсанды и код символа.

O&quot;Reilly

Просто помните, что когда вы пишете код в своем HTML, он не интерпретируется javascript, а интерпретируется HTML-парсером . Для анализатора HTML обратная косая черта - это обычный символ.

<a onclick="foo(&quot;bar&quot;);">

Теперь вы понимаете, почему я бы в первую очередь рекомендовал избегать ситуации. Вот альтернатива:

<a id="myLink">

<script type="text/javascript">
    document.getElementById('myLink').onclick = function() {
        foo('bar');
    };
</script>
0 голосов
/ 10 ноября 2009

Похоже, ') отсутствует в конце вашего события onClick, следовательно, ошибка JavaScript. Вам также нужно избегать двойных кавычек. Линия должна выглядеть так:

<a href="" onClick="return select_item('<embed src=\"player.swf\" allowfullscreen=\"true\" quality=\"high\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\" FlashVars=\"id=&flv=1257568908_.flv\" type=\"application/x-shockwave-flash\" width=\"450\" height=\"371\">');">
...