内联JS,如何在函数参数中转义引号?

时间:2014-01-11 16:38:46

标签: javascript html quotes

这是JavaScript中的错误吗? http://jsfiddle.net/SommerEngineering/mr8sZ/

<a href='javascript:test("test")'>Works</a><br/>
<a href='javascript:test("test&quot;")'>Does not work</a>

看起来JS进入字符串,将&quot;转换回",然后尝试执行命令,这当然是错误的。

3 个答案:

答案 0 :(得分:6)

你是对的。你在那里写的是html,所以html实体&quote;呈现为双引号",然后作为JavaScript执行。由于test("test"");无效javascript,因此会引发错误。如果你想将test"传递给函数,你可以像这样转义引号:test("test\"");

内联JavaScript不是一个好习惯,并且存在大量非直观问题。阅读其中一些结果: Why is inline JS bad?

以下是如何正确执行此操作的示例。

var a = document.getElementById('myElem');

a.addEventListener('click', function() {
  test('test"');
});

请注意,有很多方法可以获取元素引用,您可能希望使用类并在循环中附加处理程序。

答案 1 :(得分:2)

这不是一个js bug,实际上它是一个HTML行为。 &quot;是一个html实体,在js执行之前被解码为"

无论如何,避免在html中嵌入js,这不是一个好习惯,你的情况是一个原因。

答案 2 :(得分:2)

这不是错误。双引号有效,因为HTML属性具有单引号。但是,&quot;实体是由HTML评估的,因此传递给JavaScript引擎的数据是:

javascript:test("test"")

如果要转义引号,请使用

javascript:test("test\"")

作为\转义引号。