转义字符生成“缺少”参数列表后“错误?

时间:2011-06-02 19:01:39

标签: javascript

这里的一小段代码来自购物车:

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

Firebug的控制台显示:“缺少”参数列表后“。显然')'不会错过!但我怀疑它与转义的char

有关
&#039;

因为name =参数中没有撇号的其他类似格式的链接正常工作。

思想?

3 个答案:

答案 0 :(得分: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 :(得分:0)

使用\ x27转义撇号。这段代码应该有效:

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

答案 2 :(得分: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>