-1

我正在尝试将一些值插入到 javascript 函数中,但是在浏览器中它不起作用的原因是链接本身已损坏,因为它看起来像这样

<a false;'="" return="" location="no');" onclick="window.open(url,random_string," href=""><img alt="website" src="./images/website.png"></a>

如您所见,链接本身已损坏,我该如何解决。这是我下面的代码

data = "<a href='' onclick='window.open("+rtndata[j].artist_website+",random_string,'location=no'); return false;'><img src='./images/website.png' alt='artist website'></a>";

请注意,这rtndata[j].artist_website是一个包含 url 的变量,而 data 是用于将此代码插入网页 (Ajax) 的变量。

4

2 回答 2

1

问题在于嵌套'

data = "<a href='' onclick='window.open("+rtndata[j].artist_website+",random_string,\'location=no\'); return false;'><img src='./images/website.png' alt='artist website'></a>";

'location=no'应该用转义引号\'( \'location=no\')括起来

于 2013-06-05T15:39:03.127 回答
0

理解问题

让我们这样分解:

data = "<a href='' onclick='window.open("+rtndata[j].artist_website+",random_string,'location=no'); return false;'><img src='./images/website.png' alt='artist website'></a>";
       111111111221111111112222222222222-----------------------------22222222222222233333333333332222222222222222211111111112222222222222222222222111112222222222222222111111

代码下的行显示了引号的嵌套:

1 - 围绕整个字符串的双引号

<a>2 -标签的各种属性的单引号

3 - 再次单引号(这是错误的)传递给属性window.open()内的函数的字符串。onclick

“-” - 破折号用于显示在最外层发生字符串连接的位置。

“3”处的单引号应该是双引号,前面有一个反斜杠。这样它就不会弄乱外部字符串(存储到data变量中),因为外部 javascript 的解析器会将反斜杠双引号序列转换为“数据”中的一个双引号字符作为字符串。

当浏览器尝试将其解析为真正的 HTML 时,它也不会弄乱传递给onclick属性的内部字符串,因为双引号可以在 HTML 中的单引号内,就像在 JavaScript 中一样。

并且它将最里面的字符串标识为正在解析的 javascript - onclick属性的一部分。

很复杂的东西。

解决方案

固定代码是这样的。将两个单引号更改为反斜杠和双引号:

data = "<a href='' onclick='window.open("+rtndata[j].artist_website+",random_string,\"location=no\"); return false;'><img src='./images/website.png' alt='artist website'></a>";
       111111111221111111112222222222222-----------------------------2222222222222223333333333333332222222222222222211111111112222222222222222222222111112222222222222222111111

注意OP 发现了问题。我只是在为后人解释为什么它是一个问题,因为 OP 刚刚在评论中提到了它。

于 2013-06-05T17:27:10.170 回答