2016-07-07 40 views
1

为什么我得到这里输入意外结束:定义找不到错误的js语法

row. 
    append($("<a href='javascript:downloadFile('" + filename + "');'>" + filename + "</a>")); 

rowfilename是正常的字符串?

+3

该代码原样没有任何问题。你需要显示更多的周边代码。你是否在运行时或加载/解析时得到错误? –

+0

可能在周围代码的某处丢失括号或括号 – Jasch1

+0

函数参数的逗号将关闭用于href的单个逗号。为href使用双引号并转义它们。 – ste2425

回答

1

来自四个单引号'你有内部的问题追加所以它会被认为是href属性为:

“的javascript:downloadFile(”

使用双引号例如:

$('body').append($("<a href=\"javascript:downloadFile('" + filename + "');\">" + filename + "</a>")); 

希望这会有所帮助。

var filename = "file name test"; 
 

 
$('body').append($("<a href=\"javascript:downloadFile('" + filename + "');\">" + filename + "</a>")); 
 

 
function downloadFile(file_name){ 
 
    alert(file_name); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

不,第一个不起作用。您不能使用反斜杠来转义属性分隔符,您必须使用'''或''' – Bergi

+0

我的意思是解决方案[您首先发布](http://stackoverflow.com/revisions/38248565/1),然后用第二个解决方案,最后编辑出来。现在好了。 – Bergi

1

尝试:

row.append($("<a href='javascript:downloadFile(\"" + filename + "\");'>" + filename + "</a>")); 

您的原始代码产生以下字符串:

<a href='javascript:downloadFile('file1234.txt');'>file1234.txt</a>; 

正如你看到的,第二个'结尾的字符串。所以你的href属性实际上是:

href='javascript:downloadFile(' 

这是行不通的。

+0

这仍然容易受到XSS和HTML注入。 – Bergi

1

您所得到的错误是使用撇号作为HTML属性和JS字符串的分隔符。生成的源文件看起来像

<a href='javascript:downloadFile('123.example');'>123.example</a> 
<!-- ^     ^  ^^ --> 

而不是模板HTML没有任何转义,使用DOM! jQuery在这里使用非常方便。对于JS字符串,请使用JSON.stringify逃吧:

row.append($("<a />", { 
    href: 'javascript:downloadFile(' + JSON.stringify(filename) + ');', 
    text: filename 
})); 

但更好的是,不要用javascript:的URI!只需添加事件处理程序:

row.append($("<a />", {text: filename}).click(function(e) { 
    downloadFile(filename); 
});