2009-07-04 111 views
54

下面的簡單代碼塊可以在靜態HTML頁面中提供,但會導致JavaScript錯誤。你應該如何在onClick處理程序中隱藏嵌入式雙引號(例如\「xyz)?請注意,HTML是通過從數據庫中提取數據動態生成的,其中的數據是其他HTML代碼的片段,可能有單個或雙引號,似乎加一個反斜槓前面的雙引號字符不會做的伎倆。在JavaScript onClick事件處理程序中轉義雙引號

<script type="text/javascript"> 
    function parse(a, b, c) { 
     alert(c); 
    } 
</script> 

<a href="#x" onclick="parse('#', false, '<a href=\"xyz'); return false">Test</a> 

回答

71

你嘗試

&quot;\x22

代替

\" 

+6

我剛剛在FF3.6和IE8中測試過類似的情況下,它不起作用。然而,取代「與"沒有,我也測試了上面的確切代碼,它的工作方式。簡而言之\ x22似乎並不適用於所有情況下,你應該嘗試"在這種情況下 – SpliFF 2010-06-18 08:40:59

+3

好的"似乎工作在Webkit和Firefox和Opera的HTML標籤屬性中, – NoBugs 2011-06-15 19:19:49

+0

\ x22是唯一一個爲我工作的 – Ruwantha 2015-10-21 06:40:08

0

我認爲最好的辦法是分配onclick處理器unobtrusively

像這樣的東西:

window.onload = function(){ 
    var myLink = document.getElementsById('myLinkId'); 
    myLink.onclick = function(){ 
     parse('#', false, '<a href="xyz'); 
     return false; 
    } 
} 

//... 


<a href="#" id="myLink">Test</a> 
4

您可能還想嘗試兩個反斜槓(\\")以逃避轉義字符。

5

雖然我與CMS同意有關在不顯眼的方式做這(通過像jQuery或道場一個lib),這裏是也是工作:

<script type="text/javascript"> 
function parse(a, b, c) { 
    alert(c); 
    } 

</script> 

<a href="#x" onclick="parse('#', false, 'xyc&quot;foo');return false;">Test</a> 

它barfs是JavaScript的不是因爲這個原因,這是因爲的HTML解析器。它沒有任何轉義引號的概念,只是尋找最後的引用並找到它並將其作爲onclick函數返回。這是無效的JavaScript,雖然所以你沒有找到有關錯誤,直到JavaScript嘗試執行該功能..

50

它需要HTML轉義,而不是Javascript轉義。將\"更改爲&quot;