2009-11-10 33 views
2
<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>')> 

上述返回「未終止的字符串文字」錯誤。如何在javascript中傳遞嵌入代碼

如何解決這個問題。這個功能在smarty模板裏面。

感謝每一個答案

回答

1

如果你

unterminated string literal 

則基本上意味着你已經開始了一個字符串,但從來沒有結束它。例如。

var foo = "bar; 

解決方案是顯而易見的:終止它:

var foo = "bar"; 

另一個常見原因是使用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\" ... 
+0

但mozilla錯誤控制檯指出第一個字符的錯誤。 即「<」。現在做什麼? – Fero 2009-11-10 14:13:58

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

我也碰到與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%確定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); 
    } 
}); 
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>