-2

我在萤火虫中收到此错误:

SyntaxError: missing ) after argument list

从这段代码:

table +=
'<tbody>'+
  '<tr>'+
  '<td>'+this.zona+'</td>' +
  '<td>'+this.rruga+'<br/><div id="dialog-'+this.id+'" style= "margin-left:1px; width:340px; display:none;height:180px"></div></td>' +
  '<td>'+this.dita+'</td>' +
  '<td><img src="images/map.jpg"  id = "mapicon" onClick="show(this.rruga, this.id);"></td>' +
'<tr>'+
'<tbody>';

我不太确定)我的代码中缺少哪个括号。

4

3 回答 3

6

这是因为您使用了+引号。你编码

str = '...' + 'onclick="show(' + this.rruga + ', ' + this.id + ');"' + '...';

将生成看起来像

onclick="show(hello world,foo bar);"

这显然不起作用,因为您的函数的参数不再正确引用,因此被视为变量名,然后空格会导致引发异常。在最坏的情况下,您没有引用this.rrugathis.idHTML 编码,有人可能会传递一段特制的代码,将自定义 HTML 注入页面。

只要您对参数进行编码,就可以继续使用字符串,使它们是 HTML 安全的并且不会结束引号,然后在它们周围添加引号 ( \')。

HTML+JavaScript 编码的引号是\\&quot;for\"\\&#39;for \'。前面\\是为了不破坏JavaScript引号,然后&foo;是字符的 HTML 编码。

str = '...' + 'onclick="show(\''
            + (''+this.rruga).replace(/"/g, '\\&quot;').replace(/'/g, '\\&#39;') + '\', \''
            + (''+this.id).replace(/"/g, '\\&quot;').replace(/'/g, '\\&#39;') + '\');"'
            + '...';

当您在JavaScriptaddEventListener中生成所有这些内容时,请考虑将您的侦听器排除在 HTML 字符串之外,并将其附加到带有或的元素上node.onclick。这意味着你可以继承你在你想要的函数中的范围(尽管this仍然会改变为Node),如果你使用 DOM 方法,你不必担心通过特殊编码的方式,因为浏览器会为你做这项工作。


编辑我将添加一个功能以方便您

function quoteAndEscape(str) {
    return ''
        + '&#39;'                      // open quote '
        + (''+str)                     // force string
            .replace(/\\/g, '\\\\')    // double \
            .replace(/"/g, '\\&quot;') // encode "
            .replace(/'/g, '\\&#39;')  // encode '
        + '&#39;';                     // close quote '
}

quoteAndEscape('I\'ll say "hello" to the WORLD!');
// &#39;I\&#39;ll say \&quot;hello\&quot; to the WORLD!&#39;
// which is a HTML-encoded JavaScript String literal.
// You may also want to encode the opening and closing quotes
// these ones don't need to be backslash-escaped though.
// edited that too
于 2013-06-17T14:10:02.480 回答
3

我假设您发布的内容是命令的一部分,因此有一个'.

如果this.rruga有特殊字符,例如空格,您可能会收到此错误消息。例如:代码将创建类似show(hello there, 12);语法不正确的内容。您可以通过检查生成的 html 内容来验证这一点。

解决方案:将该论点放在引号内。…… \''+this.rruga+'\'_

于 2013-06-17T14:17:04.847 回答
1

你不能this在里面使用 '' 。此外,您需要使用getAttribute()才能rugga 从特定元素中获取价值。

这是一个工作小提琴

于 2013-06-17T14:18:16.030 回答