2016-07-07 75 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); 
});