Javascript 将参数传递给js函数
我有一个填充表格的代码。表格的最后一列是一个具有onclick功能的按钮。我试图传递一个变量,但出现以下错误:Javascript 将参数传递给js函数,javascript,Javascript,我有一个填充表格的代码。表格的最后一列是一个具有onclick功能的按钮。我试图传递一个变量,但出现以下错误: Uncaught ReferenceError: obj is not defined 我知道那个错误意味着什么,但我不知道如何修复它 if(obj[i].book_status =="Found"){ txt += "<tr><td>"+obj[i].Member_ID+"</td><td>"+obj[i].FirstName+"&
Uncaught ReferenceError: obj is not defined
我知道那个错误意味着什么,但我不知道如何修复它
if(obj[i].book_status =="Found"){
txt += "<tr><td>"+obj[i].Member_ID+"</td><td>"+obj[i].FirstName+"</td>" +
"<td>"+obj[i].LastName+"</td><td>" +obj[i].IssueDate+"</td><td>"+
obj[i].DueDate+"</td><td><button class='btn btn-primary' onClick='getID(obj[i].Member_ID);'>CheckIn</button></td></tr>";
}
}
if(obj[i].book_status==“Found”){
txt+=“”+obj[i]。成员ID+“”+obj[i]。名字+“”
“+obj[i]。LastName+”+obj[i]。IssueDate+”+
obj[i].DueDate+“签入”;
}
}
您正在生成一个包含JavaScript的HTML字符串。当JavaScript被执行时,它将处于一个完全不同的作用域,在这个作用域中,obj
没有定义
不要通过将HTML字符串混合到DOM中来处理DOM。使用标准DOM方法(如createElement和appendChild)。然后,您可以添加事件侦听器并保留您的范围
您还可以将相关数据存储在元素上,以避免创建闭包
例如,以下内容:
var row, td, item, button;
item = obj[i];
if (item.book_status == "Found") {
row = document.createElement("tr");
cell = document.createElement("td");
cell.appendChild(document.createTextNode(item.Member_ID));
row.appendChild(cell);
cell = document.createElement("td");
cell.appendChild(document.createTextNode(item.FirstName));
row.appendChild(cell);
cell = document.createElement("td");
cell.appendChild(document.createTextNode(item.LastName));
row.appendChild(cell);
cell = document.createElement("td");
cell.appendChild(document.createTextNode(item.IssueDate));
row.appendChild(cell);
cell = document.createElement("td");
cell.appendChild(document.createTextNode(item.DueDate));
row.appendChild(cell);
cell = document.createElement("td");
button = document.createElement("button");
button.appendChild(document.createTextNode("CheckIn"));
button.classList.add("btn");
button.classList.add("btn-primary");
button.setAttribute("data-id", item.Member_ID);
button.addEventListener("click", getIDHandler)
row.appendChild(cell);
function getIDHandler(event) {
getID(this.getAttribute("data-id"));
}
SOMETHING.appendChild(row);
}
您正在生成一个包含JavaScript的HTML字符串。当JavaScript被执行时,它将处于一个完全不同的作用域,在这个作用域中,
obj
没有定义
不要通过将HTML字符串混合到DOM中来处理DOM。使用标准DOM方法(如createElement和appendChild)。然后,您可以添加事件侦听器并保留您的范围
您还可以将相关数据存储在元素上,以避免创建闭包
例如,以下内容:
var row, td, item, button;
item = obj[i];
if (item.book_status == "Found") {
row = document.createElement("tr");
cell = document.createElement("td");
cell.appendChild(document.createTextNode(item.Member_ID));
row.appendChild(cell);
cell = document.createElement("td");
cell.appendChild(document.createTextNode(item.FirstName));
row.appendChild(cell);
cell = document.createElement("td");
cell.appendChild(document.createTextNode(item.LastName));
row.appendChild(cell);
cell = document.createElement("td");
cell.appendChild(document.createTextNode(item.IssueDate));
row.appendChild(cell);
cell = document.createElement("td");
cell.appendChild(document.createTextNode(item.DueDate));
row.appendChild(cell);
cell = document.createElement("td");
button = document.createElement("button");
button.appendChild(document.createTextNode("CheckIn"));
button.classList.add("btn");
button.classList.add("btn-primary");
button.setAttribute("data-id", item.Member_ID);
button.addEventListener("click", getIDHandler)
row.appendChild(cell);
function getIDHandler(event) {
getID(this.getAttribute("data-id"));
}
SOMETHING.appendChild(row);
}
问题在于,
onclick
内联处理程序中有一个字符串值,因为必须将其串联起来:
"</td><td><button ... onClick='getID('"+ obj[i].Member_ID +"');'>...</td></tr>";
“…”;
问题在于,onclick
内联处理程序中有一个字符串值,因为您必须将其串联起来:
"</td><td><button ... onClick='getID('"+ obj[i].Member_ID +"');'>...</td></tr>";
“…”;
什么是循环函数?你能发布一条有助于调试的信息吗?你是说循环函数在哪里?我只是没有把它放在这里,因为我没有发现包含它的必要性什么是循环函数?你能发布一个,这将有助于调试。你的意思是循环函数在哪里?我没有把它放在这里,因为我觉得没有必要包括它。你能举个例子吗?我对js很陌生。目前,如果我决定使用字符串方法,有没有办法解决这个问题?你能举个例子吗?我对js很陌生。目前,如果我决定使用字符串方法,有没有办法解决这个问题?@Quentin right!我明白了。这可以是字母数字。但它不能是一个对象或包含一个“
字符(可能没有给出名称,但突出了将字符串混合在一起生成嵌入HTML的JavaScript的脆弱性)。@Quentin right!我明白了。它可以是字母数字,但不能是对象,也不能包含“
字符(可能没有给出名称,但突出了将字符串混合在一起生成嵌入HTML中的JavaScript的脆弱性)。