【发布时间】:2020-06-19 22:21:17
【问题描述】:
我正在尝试构建一个网络应用程序,用于从电子表格中收集表格的内容。因此,我将电子表格的内容放在一个数组中,并使用 forEach 循环在 JavaScript 中构建表格。这一切正常,但我希望每一行的一个单元格是可点击的。单击单元格时,我想调用另一个 javascript 函数并将相应行中其他单元格的内容作为变量传递。 我通过在单元格中添加一个链接来使用 onclick 事件调用该函数来做到这一点。当我单击单元格时,我会在控制台日志中看到该函数已被调用,但我想要传递的变量未定义。
我认为问题在于,当单击单元格时,循环结束并且不再定义变量。但我完全不知道这个问题的解决方法。
我的带有 javascript 代码的 HTML 文件(我说的是 //Table JS 部分中的 else,几乎在代码的末尾):
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">
<style>
table.centered {
table-layout: fixed;
width: 100%;
}
td {
width: 25%;
}
div.add-form{
width: 50%;
}
</style>
</head>
<body>
<h1>Buch hinzufügen</h1>
<div class="add-form">
<label>Buchtitel: </label><input type="text" id="titel" class="eingabefeld"> <br>
<label>Buchautor: </label><input type="text" id="autor" class="eingabefeld"> <br>
<label>Auflage: </label><input type="number" id="auflage" class="eingabefeld"> <br>
<button id="btn">Hinzufügen</button>
</div>
<!-- Tabelle Buchliste -->
<h1>Buchliste</h1>
<table class="centered">
<thead>
<tr bgcolor="#f0f0f0">
<th>Buchtitel</th>
<th>Buchautor</th>
<th>Auflage</th>
<th>Status</th>
</tr>
</thead>
<tbody id="table-body">
</tbody>
</table>
<script>
//Buch hinzufügen JS
document.getElementById("btn").addEventListener("click",doStuff);
function doStuff(){
var titel = document.getElementById("titel").value;
var autor = document.getElementById("autor").value;
var auflage = document.getElementById("auflage").value;
//validateForm
if (titel == "" || autor=="" || auflage=="") {
alert("FEHLER: Alle Felder müssen ausgefüllt sein!");
return false;
}
//passInfoToGoogleScript
google.script.run.addInfo(titel, autor, auflage);
//clearInputFields
document.getElementById("titel").value = "";
document.getElementById("autor").value = "";
document.getElementById("auflage").value = "";
}
//Table JS
document.addEventListener("DOMContentLoaded", function(){
google.script.run.withSuccessHandler(addElementsToTable).getTableData();
});
function addElementsToTable(data){
var tbody = document.getElementById("table-body");
data.forEach(function(r){
var row = document.createElement("tr");
var col1 = document.createElement("td");
col1.textContent = r[0];
var col2 = document.createElement("td");
col2.textContent = r[1];
var col3 = document.createElement("td");
col3.textContent = r[2];
var col4 = document.createElement("td");
if(r[3]=="nicht verfügbar"){
console.log("nicht verfügbar erkannt");
col4.textContent = r[3] + " | Klick zum Zurückgeben";
col4.setAttribute("style", "background-color: #E40046;color: #ffffff");
}
else{
console.log("verfügbar erkannt");
var link = document.createElement("a");
link.setAttribute("onclick", "test(r[0],r[1],r[2])");
link.textContent = r[3] + " | Klick zum Ausleihen";
link.setAttribute("style", "color: #ffffff;");
col4.setAttribute("style", "background-color: #00965E;");
col4.appendChild(link);
}
row.appendChild(col1);
row.appendChild(col2);
row.appendChild(col3);
row.appendChild(col4);
tbody.appendChild(row);
});
}
function test(titel,autor,auflage) {
console.log("Test");
console.log("Titel: " + titel + " | Autor: " + autor + " | Auflage: " + auflage);
}
</script>
</body>
</html>
错误信息: "Uncaught ReferenceError: r is not defined at HTMLAnchorElement.onclick"
【问题讨论】:
标签: javascript html foreach onclick