这是JavaScript中的错误吗? http://jsfiddle.net/SommerEngineering/mr8sZ/
<a href='javascript:test("test")'>Works</a><br/>
<a href='javascript:test("test"")'>Does not work</a>
看起来JS进入字符串,将"
转换回"
,然后尝试执行命令,这当然是错误的。
答案 0 :(得分:6)
你是对的。你在那里写的是html,所以html实体"e;
呈现为双引号"
,然后作为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行为。 "
是一个html实体,在js执行之前被解码为"
。
无论如何,避免在html中嵌入js,这不是一个好习惯,你的情况是一个原因。
答案 2 :(得分:2)
这不是错误。双引号有效,因为HTML属性具有单引号。但是,"
实体是由HTML评估的,因此传递给JavaScript引擎的数据是:
javascript:test("test"")
如果要转义引号,请使用
javascript:test("test\"")
作为\
转义引号。