Javascript 将参数传递给js函数

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+"&

我有一个填充表格的代码。表格的最后一列是一个具有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+"</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的脆弱性)。