Javascript 在forEach循环中通过onclick将变量传递给函数-googleapps脚本
我正在尝试构建一个web应用程序,从电子表格中收集表格的内容。因此,我将电子表格的内容放在一个数组中,并使用带有forEach循环的JavaScript构建表。这一切正常,但我希望每行有一个单元格可以点击。单击单元格时,我想调用另一个javascript函数,并将相应行中其他单元格的内容作为变量传递。 我在单元格中添加了一个链接,该链接使用onclick事件调用函数。当我单击单元格时,我在控制台日志中看到,函数被调用了,但是我想要传递的变量没有定义 我认为问题在于,当点击单元格时,循环结束,变量不再定义。但我完全不知道这个问题的解决方法 我的HTML文件和javascript代码(我在//Table JS一节中讨论了else,基本上在代码的末尾):Javascript 在forEach循环中通过onclick将变量传递给函数-googleapps脚本,javascript,html,foreach,onclick,Javascript,Html,Foreach,Onclick,我正在尝试构建一个web应用程序,从电子表格中收集表格的内容。因此,我将电子表格的内容放在一个数组中,并使用带有forEach循环的JavaScript构建表。这一切正常,但我希望每行有一个单元格可以点击。单击单元格时,我想调用另一个javascript函数,并将相应行中其他单元格的内容作为变量传递。 我在单元格中添加了一个链接,该链接使用onclick事件调用函数。当我单击单元格时,我在控制台日志中看到,函数被调用了,但是我想要传递的变量没有定义 我认为问题在于,当点击单元格时,循环结束,变量
以表格为中心{
表布局:固定;
宽度:100%;
}
运输署{
宽度:25%;
}
div.add-form{
宽度:50%;
}
布赫欣祖富根酒店
布奇特尔:
布赫托尔:
伪装:
欣祖夫根
布克莱斯特
布奇特尔
布赫托尔
伪装
地位
//布赫欣祖富根酒店
document.getElementById(“btn”)。addEventListener(“单击”,doStuff);
函数doStuff(){
var titel=document.getElementById(“titel”).value;
var autor=document.getElementById(“autor”).value;
var auflage=document.getElementById(“auflage”).value;
//验证窗体
如果(滴度=“”| |自动=“”| |伪装=“”){
警惕(“费勒:阿勒·费尔德·穆森·奥斯格夫·尤利特·塞恩!”);
返回false;
}
//PassInfoToGogleScript
google.script.run.addInfo(titel、autor、auflage);
//clearInputFields
document.getElementById(“titel”).value=“”;
document.getElementById(“autor”).value=“”;
document.getElementById(“auflage”).value=“”;
}
//表JS
document.addEventListener(“DOMContentLoaded”,function()){
google.script.run.withSuccessHandler(addElementsToTable.getTableData();
});
函数加法器表(数据){
var tbody=document.getElementById(“表体”);
data.forEach(函数(r){
var行=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”);
如果(r[3]=“nicht verfügbar”){
console.log(“nicht verfügbar erkannt”);
col4.textContent=r[3]+“Klick zum Zurückgeben”;
col4.setAttribute(“样式”,“背景色:#E40046;颜色:#ffffff”);
}
否则{
console.log(“verfügbar erkannt”);
var link=document.createElement(“a”);
setAttribute(“onclick”,“test(r[0],r[1],r[2])”;
link.textContent=r[3]+“|Klick zum Ausleihen”;
setAttribute(“样式”、“颜色:#ffffff;”);
col4.setAttribute(“样式”,“背景色:#00965E;”);
col4.appendChild(link);
}
行。追加子行(col1);
行。追加子行(col2);
第行。追加子项(col3);
第行。追加子行(col4);
tbody.appendChild(世界其他地区);
});
}
功能测试(滴度、自动、伪装){
控制台日志(“测试”);
log(“Titel:+Titel+”| Autor:+Autor+| Auflage:+Auflage”);
}
错误消息:
“未捕获引用错误:在HtmlanchoreElement.onclick中未定义r”不要在现代程序中使用
onxyz
属性进行事件处理。他们创建的函数是在全局范围内创建的。您的r
变量是函数调用的本地变量
相反,请使用现代事件处理:
link.addEventListener("click", function() {
test(r[0], r[1], r[2]);
});
单击时,将调用test
,并使用r
中的当前值。事件处理程序关闭r
实例:
var fakeData=[
[
“第一行值0”,
“第一行值1”,
“第一行值2”,
“第一行值3”
],
[
“第二行值0”,
“第二行值1”,
“第二行值2”,
“不可能”
],
[
“第三行值0”,
“第三行值1”,
“第三行值2”,
“第三行值3”
]
];
功能测试(x、y、z){
控制台日志(x,y,z);
}
var tbody=document.getElementById(“主体”);
fakeData.forEach(函数(r){
var行=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”);
如果(r[3]=“nicht verfügbar”){
console.log(“nicht verfügbar erkannt”);
col4.textContent=r[3]+“Klick zum Zurückgeben”;
col4.setAttribute(“样式”,“背景色:#E40046;颜色:#ffffff”);
}
否则{
console.log(“verfügbar erkannt”);
var link=document.createElement(“a”);
link.addEventListener(“单击”,函数(){
测试(r[0],r[1],r[2]);
});
link.textContent=r[3]+“|Klick zum Ausleihen”;
setAttribute(“样式”、“颜色:#ffffff;”);
col4.setAttribute(“样式”,“背景色:#00965E;”);
可乐
link.addEventListener("click", function() {
test(r[0], r[1], r[2]);
});