找不到错误的js语法

时间:2016-07-07 14:45:25

标签: javascript

为什么我在这里得到意外的输入结束:

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

row已定义,filename是普通字符串吗?

3 个答案:

答案 0 :(得分:1)

问题来自您在内部附加的四个单引号',因此它将href属性视为:

  

'的javascript:downloadFile('

使用单引号的{-1}}双引号并转义它们,例如:

"

希望这有帮助。

$('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);
}

答案 1 :(得分:1)

尝试:

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

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

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

如你所见,第二个&#39;结束字符串。所以你的href属性实际上是:

href='javascript:downloadFile('

不会工作。

答案 2 :(得分: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);
});