如何在javascript中传递嵌入代码

时间:2009-11-10 13:57:08

标签: javascript smarty

<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 个答案:

答案 0 :(得分:3)

我也遇到了Smarty的情况,它试图将Javascript评估为Smarty模板代码。

在这种情况下,您需要使用{literal}{/literal}标记包围Javascript。


但是,在您的情况下,我认为您错过了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>')">

我不是百分百确定你是否真的需要反斜杠 - 转义属于<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 :(得分:1)

如果你得到

unterminated string literal

然后它基本上意味着你已经启动了一个String,但从未结束它。 E.g。

var foo = "bar;

解决方案很明显:终止它:

var foo = "bar";

另一个常见原因是使用String中的相同引号作为String的包装:

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

然后你需要逃避这样的引用:

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

在您的特定情况下,您在HTML字符串中有",而该字符串又包含在"属性的另一个onclick内。所以:

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

需要替换为

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

答案 2 :(得分:0)

在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\">');">

答案 3 :(得分:0)

关于在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>