Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript &引用;SyntaxError:缺少)参数列表后“;_Javascript_Syntax Error - Fatal编程技术网

Javascript &引用;SyntaxError:缺少)参数列表后“;

Javascript &引用;SyntaxError:缺少)参数列表后“;,javascript,syntax-error,Javascript,Syntax Error,我在firebug中遇到以下错误: 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; wid

我在firebug中遇到以下错误:

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>';
表格+=
''+
''+
''这个,佐纳''+
“+this.rruga+”
”+ ''这个,迪塔+''+ '' + ''+ '';

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

这是因为您在引号中使用了
+
。你的代码

str = '...' + 'onclick="show(' + this.rruga + ', ' + this.id + ');"' + '...';
将生成如下所示的HTML

onclick="show(hello world,foo bar);"
这显然不起作用,因为函数的参数不再被正确引用,因此被视为变量名,然后空格导致抛出异常。在最坏的情况下,如果您没有引用
this.rruga
this.id
或对其进行HTML编码,则可能有人会传递一段精心编制的代码,将自定义HTML注入页面

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

HTML+JavaScript编码的引号是
\\”
,用于
\”
\&&39用于
\'
。前面的
\\
是为了不打断JavaScript引号,然后是
&foo
是字符的HTML编码

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

当您在JavaScript中生成所有这些时,请考虑将监听器保持在HTML字符串之外,并将其附加到元素中,或者简单地使用“代码>节点”。这意味着您可以继承您在所需函数中的位置范围(尽管

仍将更改为表示节点),并且如果您使用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

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

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


解决方案:把那个论点放在引号里<代码>\''+this.rruga+'\'
..

您不能在内部使用
。 此外,您需要使用
getAttribute()
从特定元素获取
rugga


这是一个可行的方法。

您的字符串连接没有意义。事实上,您的字符串连接没有连接
onClick=“show(this.rruga,this.id);”
似乎没有语法错误。但这肯定不是你想要的。要么你的代码不同,要么语法错误被抛出到其他地方。我打赌不是这样。看到我的答案了。你认为这个DOM元素有rruga属性吗?@dystroy不是默认的
+
只是字符串的一部分,代码本身实际上在语法上是正确的。OP可能在一个更扩展的解决方案中有这个代码,而不是元素。但是我们不知道它是什么。this.rruga是从JSON函数(data,function(){…})提交的是的,但与此无关。这不能解释语法错误。我看不到任何有效的答案:在
show
function show(street,id){window.alert(street+“->”+id);}我已经用你的函数替换了fiddle中的
show
,检查fiddle。根据小提琴更改
,看看它是否适合您。