2011-06-02 57 views
1

這個小行代碼這裏是一個購物車:轉義字符後生成「失蹤)參數列表」錯誤?

<a href="javascript:;" onclick="simpleCart.add('name=The Devil&#039;s Sneakers', 'price=10', 'shipping=0', 'quantity=1');">Add To Cart</a> 

Firebug的控制檯顯示:「失蹤)後,參數列表」。顯然,')'並沒有丟失!但我懷疑它做的轉義字符

&#039; 

因爲其他類似格式的鏈接,而不在名稱=參數撇號工作的罰款。

想法?

+1

嘗試用'\'替換它並查看會發生什麼。可能你有一個輸出過濾器,它正在解碼實體,所以它被還原爲一個char字符。 – 2011-06-02 19:04:03

回答

4
onclick="simpleCart.add('name=The Devil&#039;s Sneakers'... 

與撇號的HTML屬性裏逃出來的HTML的水平。這與說法完全一樣:

onclick="simpleCart.add('name=The Devil's Sneakers'... 

與字符串關閉太早的明顯問題。 HTML轉義不能幫助你,因爲HTML轉義只需要對HTML特殊的字符進行編碼。這將包括雙引號字符,但不包括單引號,因爲您已使用雙引號來分隔屬性值。

這裏的撇號對於HTML並不是特別的,但是它對JavaScript來說是特殊的。您需要使用JavaScript字符串字面逃逸,並在那種逃避,你需要反斜線:

onclick="simpleCart.add('name=The Devil\'s Sneakers'... 

無論哪種方式,很明顯,逃脫內的其他逃逸是讓人有些困惑,這是另一個很好的理由不使用內聯事件處理器屬性。相反,在普通的JavaScript:

<button type="button" id="foo">Add to cart</button> 
<script type="text/javascript"> 
    document.getElementById('foo').onclick = function() { 
     simpleCart.add("name=The Devil's Sneakers", 'price=10', 'shipping=0', 'quantity=1'); 
    }; 
</script> 

(我用了一個按鈕,因爲你所得到的是不是去任何地方的鏈接,您可以設置樣式看起來像一個鏈接,而不是一個按鈕,如果你願意,。但最好不要鏈接,如果沒有鏈接的正常可用性,如中間點擊或右鍵單擊書籤有任何意義。)

+1

寫得很好(今天沒有更多的提示: - /)在JS文字中也可以指示表示字符的其他方法 - 也就是\ x和\ u - 因爲這些方法在更復雜的情況下很方便(或者自動生成引用)。 – 2011-06-02 19:25:30

+0

您是否有意使用'document.getElementById('foo')。onclick = ...'? – 2011-06-02 19:58:45

+0

是的。我放了什麼?哦!我懂了。嘖!謝謝 :-) – bobince 2011-06-02 20:47:46

0

用\ x27轉義撇號。此代碼應工作:

<a href="javascript:;" onclick="simpleCart.add('name=The Devil\x27s Sneakers', 'price=10', 'shipping=0', 'quantity=1');">Add To Cart</a> 
0

嘗試\」,而不是&#039;

它運作良好。

<html> 
<body> 
<a href="javascript:;" onclick="alert('The Devil\&#039;s Sneakers');">Add To Cart</a> 
<a href="javascript:;" onclick="alert('The Devil\'s Sneakers');">Add To Cart</a> 
</body> 
</html>