<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模板中。
感谢您的每一个答案
答案 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"Reilly
请记住,当您在HTML中编写代码时,它不会被javascript解释,而是由HTML解析器解释。对于HTML解析器,反斜杠只是一个常规字符。
<a onclick="foo("bar");">
现在你明白为什么我建议首先避免这种情况。这是替代方案:
<a id="myLink">
<script type="text/javascript">
document.getElementById('myLink').onclick = function() {
foo('bar');
};
</script>