我写了以下JS代码:
function downloadFile(dataItem) {
....
}
....
for (var r = 0; r < dataItems.length ; r++) {
table += '<tr>';
var listOfAttributes = ['CarModel', 'BusMapping', 'Date_', 'Location_', 'Comments', 'AttackTraffic', 'IsTagged']
**table +='<td> <a onclick="downloadFile(dataItems[r])" href="#">' + dataItems[r]['FileName']['S'] +'</a></td>';**
for (var c = 0; c < Object.keys(dataItems[0]).length-1 ; c++) {
table +='<td>' + dataItems[r][listOfAttributes[c]]["S"] +'</td>';
}
table+= '</tr>'
}
我收到该行的错误:
table +='<td> <a onclick="downloadFile(dataItems[r])" href="#">' + dataItems[r]['FileName']['S'] +'</a></td>';
似乎JS无法解决变量&#39; dataItems&#39;在-tag中:
<a onclick="downloadFile(dataItems[r])" href="#">.
但是,稍后在同一行中,JS成功解析了该部分的相同名称:
+ dataItems[r]['FileName']['S'] +
您认为这可能是什么问题?如何在-tag内部解析dataItem?
答案 0 :(得分:3)
您的变量位于字符串中。尝试将代码更改为:
table +='<td> <a onclick="' + downloadFile(dataItems[r]) + '" href="#">' + dataItems[r]['FileName']['S'] +'</a></td>';**
答案 1 :(得分:0)
在这一行
<a onclick="downloadFile(dataItems[r])" href="#">
除非dataItems
是一个全局变量,否则它将无法用于进行此调用downloadFile(dataItems[r])
的环境,因为onclick事件将在全局范围内调用。
你需要以这种方式更少干扰地绑定事件
//you need to update the selector as per your markup
document.querySelector ( "tr td a" ).addEventListener( "click", function(){
downloadFile(dataItems[r]);
})
答案 2 :(得分:0)
当您在元素属性中放置一个字符串时,它不会被识别为JavaScript代码或JavaScript函数,因此请放置JavaScript函数。
所以你可以做,var anchor = '<a href="#" onclick="' + your_func_here + '"></a>';
说明问题的示例示例,在此示例中,如果您将函数名称作为字符串写入onclick
属性,则函数将不会被调用。
var container = document.getElementById('container');
var element = document.createElement('a');
element.href = '#';
element.text = 'Fire!';
element.onclick = fire; // this invokes the fire function
// element.onclick = 'fire'; // this won't invoke the fire function
container.appendChild(element);
function fire() {
console.log('fired');
}
&#13;
<div id="container">
</div>
&#13;